【发布时间】:2013-02-16 21:19:33
【问题描述】:
我有一个 105x105 矩阵 B(实际上是一个 35x35 的 矩阵连接组),我必须根据适用于 矩阵的规则更改其元素。
鉴于任何子矩阵每行只能有“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],变成[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;1 1 1;1 1 1]
和[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
难道没有替代的无循环方法吗?
【问题讨论】:
标签: matlab optimization for-loop