2017-02-13 68 views
2

A(m x j*m)矩陣,A1=A(1:m,1:m)A2=A(1:m,(m+1):2*m)等等。在MATLAB中求矩陣的向量塊向量

什麼是一些簡單的代碼來計算A1+...+Aj某些整數j>1

感謝

要做到這一點可能是 reshape矩陣成3D使每塊切片,然後沿第三維度總結
+0

如果'm'和'n'是奇數,會發生什麼? – codeaviator

+0

檢查編輯。應該清楚。 – hipHopMetropolisHastings

+0

如何定義「A3」? 'A3 = A(1:M,(2 * M + 1):3 *米)'? – codeaviator

回答

3

方式一:

B = reshape(A, m, m, []); 
out = sum(B, 3); 

...或者在一個

out = sum(reshape(A, m, m, []), 3); 

reshape需要你的矩陣的列和堆棧他們確保輸出重塑INT:如果不想使用臨時變線o您想要的正確尺寸。因此,我們想要m行和m列,並且第三維是動態的,或者是空的[],以便我們可以自動確定我們需要多少片。從技術上講,這應該是j,但我們會讓MATLAB的數字出來。這個重新定形的結果會給你一個3D矩陣,其中每個片是一個塊。 m列是m行長,我們有j其中。剩下的就是沿着所有的方塊進行求和,這是沿着第三維進行求和的。

下面是一個快速示例,以確保我們擁有此權利。我們假設m = 6j = 3。我要創建將是6 x 18在這種情況下,一個矩陣:

>> m = 6; 
>> j = 3; 
>> A = reshape(1 : (m*(j*m)), m, []) 

>> A 

A = 

    1  7 13 19 25 31 37 43 49 55 61 67 73 79 85 91 97 103 
    2  8 14 20 26 32 38 44 50 56 62 68 74 80 86 92 98 104 
    3  9 15 21 27 33 39 45 51 57 63 69 75 81 87 93 99 105 
    4 10 16 22 28 34 40 46 52 58 64 70 76 82 88 94 100 106 
    5 11 17 23 29 35 41 47 53 59 65 71 77 83 89 95 101 107 
    6 12 18 24 30 36 42 48 54 60 66 72 78 84 90 96 102 108 

使用reshape從而使我們有3片三維矩陣,我們應該能夠細分出很好每片塊:

>> B = reshape(A, m, m, []) 

B(:,:,1) = 

    1  7 13 19 25 31 
    2  8 14 20 26 32 
    3  9 15 21 27 33 
    4 10 16 22 28 34 
    5 11 17 23 29 35 
    6 12 18 24 30 36 


B(:,:,2) = 

    37 43 49 55 61 67 
    38 44 50 56 62 68 
    39 45 51 57 63 69 
    40 46 52 58 64 70 
    41 47 53 59 65 71 
    42 48 54 60 66 72 


B(:,:,3) = 

    73 79 85 91 97 103 
    74 80 86 92 98 104 
    75 81 87 93 99 105 
    76 82 88 94 100 106 
    77 83 89 95 101 107 
    78 84 90 96 102 108 

最後,由於每個塊是在這個3D矩陣片,只是沿着第三維度總結:

>> out = sum(B, 3) 

out = 

    111 129 147 165 183 201 
    114 132 150 168 186 204 
    117 135 153 171 189 207 
    120 138 156 174 192 210 
    123 141 159 177 195 213 
    126 144 162 180 198 216 

我們可以確認這是正確的作爲第一行,輸出的第一列是1 + 37 + 73 = 111的總和。類似地,第一行第二列是7 + 43 + 79 = 129。可以對輸出的其餘部分執行類似的檢查驗證結果的正確性。顯然,你必須確保矩陣的尺寸是可以兼容的,以便進行這種重塑或發生錯誤。

+0

不錯......感謝接受!我其實就是要測試這個以確保它的工作。我想它確實:P – rayryeng

+1

非常好的答案!我喜歡它的一切。 – codeaviator

+1

殺了它!一個好方法。 – hipHopMetropolisHastings