【发布时间】:2016-09-23 01:16:23
【问题描述】:
我想分析更大矩阵中的 2x2 块,如果其中两个块相同,则删除它们。我尝试自己编写的代码看起来有点像这样(C 是一个有 2 个列的大矩阵):
n=size(C,1);
for k=1:2:(n-3)
for l=(k+2):2:(n-1)
if C(k:k+1,1:2)==C(l:l+1,1:2);
C([l,l+1],:)=[];
else
end
end
end
我遇到的问题是,matlab 在删除 C 中的行时没有“注意到” C 的大小正在缩小。这意味着最终代码会遇到问题,因为它要求在一个太高的维度上进行相等检查。我怎样才能避免它?有更好的方法吗?
我也尝试过围绕“独特”命令。但这仅适用于行。我需要 2x2 段(从奇数行开始)。
完整(原始)代码在这里:
A=[1,0;0,1i];
B=1/sqrt(2)*[1,1;1,-1];
C=[0,0;0,0];
C(1:2,1:2)=A(1:2,1:2);
C(3:4,1:2)=B(1:2,1:2);
for m=1:20
d=size(C,1)
C_A=C*A;
C_B=C*B;
s_a=size(C_A);
s_a=s_a(1,1);
s_b=size(C_B);
s_b=s_b(1,1);
C((d+1):(d+s_a),1:2)=C_A(1:s_a,1:2);
C((d+s_a+1):(d+s_a+s_b),1:2)=C_B(1:s_b,1:2);
n=size(C,1);
for k=1:2:(n-3)
for l=(k+2):2:(n-1)
if C(k:k+1,1:2)==C(l:l+1,1:2);
C([l,l+1],:)=[];
else
end
end
end
new_n=size(C,1)
if d==new_n
error('Done')
else
end
end
【问题讨论】:
-
你能展示一些示例数据和预期输出吗?目前尚不清楚当您从矩阵中间“移除”一个 2 x 2 块时会发生什么
-
@Suever 他们说 C 是 nx2 矩阵;本来我也在想同样的事情