2010-06-28 89 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