2017-02-13 55 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