让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使每块切片,然后沿第三维度总结
让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使每块切片,然后沿第三维度总结
方式一:
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 = 6
和j = 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。可以对输出的其余部分执行类似的检查验证结果的正确性。显然,你必须确保矩阵的尺寸是可以兼容的,以便进行这种重塑或发生错误。
不错......感谢接受!我其实就是要测试这个以确保它的工作。我想它确实:P – rayryeng
非常好的答案!我喜欢它的一切。 – codeaviator
杀了它!一个好方法。 – hipHopMetropolisHastings
如果'm'和'n'是奇数,会发生什么? – codeaviator
检查编辑。应该清楚。 – hipHopMetropolisHastings
如何定义“A3”? 'A3 = A(1:M,(2 * M + 1):3 *米)'? – codeaviator