我有一个105x105的矩阵B(实际上是一个连接的矩阵的35x35组),我必须根据一个规则改变其元素< 3x3>矩阵。根据子矩阵规则更改大矩阵的元素
鉴于任何子矩阵每行只能有“1”,“1”只能出现在(1,1)和/或(2,2)和/或(3,3)。
因此唯一可能的子矩阵是
[0 0 0 0 0 0 0 0 0],它变为[0 0 0 0 0 0 0 0 0]
[1 0 0 0; 0 0 0; 0 0 0],其变成[1 1 1; 0 0 0; 0 0 0]
[0 0 0; 0 1 0; 0 0 0] 0 0 0 1 1 1 0 0 0]
[0 0 0 0 0 0 0 0 1],它变为[0 0 0 0 0 0 1 1 1]
[1 0 0; 0 1 0; 0 0 0],其变成[1 1 1; 1 1 1; 0 0 0]
[1 0 0; 0 0 0; 0 0 1]变为[1 1 1; 0 0 0; 1 1 1]
[0 0 0; 0 1 0; 0 0 1],变成[0 0 0; 111]; 111 0
和[1 0 0; 0 1 0; 0 0 1],它变为[1 1 1 1 1 1; 1 1 1]
我使用[1 1 1]*any(submatrix,2)
改变值累计。到规则,它工作正常。但我使用下面的循环遍历所有的子矩阵:
for i=1:3:103
for j=1:3:103
temp=A(i:i+2,j:j+2);
temp=[1 1 1]*any(temp,2);
A(i:i+2,j:j+2)=temp
end
end
是不是有一个替代loopless方法做到这一点?
它完美。你是怎么想出这样的解决方案的? – 2013-02-16 23:09:24
@KunalRmth:我只是在考虑操作是什么(如果它包含一个操作,就填充一行),然后想知道如何安排原始数组以便于操作。此外,我真的很好用Matlab;) – Jonas 2013-02-17 01:17:28
,因为你是如此优秀的Matlab,请参阅真的需要一些环removings。 –
2013-02-17 22:50:08