2010-06-28 90 views
0

请帮我理解这个代码:什么下列MATLAB代码的平均

x(:,i) = mean((y(:,((i-1)*j+1):i*j)), 2)'; 

我不能在我的书中找到它。谢谢。

 a  = (i-1)*j+1; 
     b  = i*j; 
     val  = y(:,a:b); 
     x(:,i) = mean(val, 2)'; %# =mean(val') 

正是你不明白:

回答

4

您发布的代码可以使用临时变量进行更具可读性?有关mean:'的含义,请参阅matlab帮助。

+0

我找不到'的意思。 – nata 2010-06-28 17:16:36

+0

http://www.mathworks.com/access/helpdesk/help/techdoc/ref/arithmeticoperators.html – yuk 2010-06-28 18:12:19

1

数组x的第i列是数组y的第i组j列的平均值。

例如,如果i是1且j是3,则x的第1列是y的前三列的平均值。

2

,如果你说你不明白到底是什么会有所帮助,但这里有几个技巧:

  1. 如果你碰到这样的一个(R,C),这意味着矩阵,行r,c列(总是按此顺序)。换句话说,括号内应该有两个元素,用逗号分隔,第一个代表行,第二个代表列。

  2. 如果你有:单独在逗号的一边,那就意味着“全部”。因此,如果你有一个(r,:),那么你将有矩阵a,行r,所有列。

  3. 如果:在逗号的其中一边不是单独的,则表示“到”。所以如果你有一个(r,z:y),那就意味着矩阵a,行r,列z到y。

  4. 平均值=平均值。 Matlab中函数的格式是M = mean(A,dim)。 A将是您取平均值(或平均值)的矩阵,M将是结果将要去的地方。如果dim = 1,则会得到一个行向量,每个元素是列的平均值。如果dim = 2(就像你的情况那样),那么你应该得到一个列向量,每个元素是一行的平均值。 但要小心,因为在你的代码结尾处有',这意味着转置。这意味着你的列向量将被转换成一个行向量。

好了,你的代码:

x(:,i) = mean((y(:,((i-1)*j+1):i*j)), 2)'; 

启动里面的一点,那就是

y(:,((i-1)*j+1):i*j) 

所以这是说

矩阵Y(R,C)

其中

R(行)为:,即,所有的行

C(列)为(第(i-1)J + 1):ⅰĴ,即,从列(I-去1)J + 1,直到我Ĵ

你的代码,然后将得到的是得到的矩阵,我把它叫做Y(R,C),并执行以下操作:

mean((y(r,c), 2) 

所以得到上面的结果并取每行的平均值(平均值)。由于你的代码有'之后,也就是说,你有:

mean((y(r,c), 2)' 

然后它会得到列向量并转换成行向量。该行的每个元素将是y(r,c)的一行的平均值。

最后:

x(:,i) = mean((y(r,c), 2)'; 

意味着的上述结果将被放置在矩阵x的I栏。

不应该是x(i,:)而是?

+0

哦,我明白了。我找不到'的意思。 感谢您的解释。 – nata 2010-06-28 17:28:23

+2

@nata:如果你喜欢这篇文章,然后投票! – Mikhail 2010-06-28 20:42:54