我有一个5x1矩阵,比如x=[6;8;4;2;9]
,我想要做的是比较第1行和第2,3,4,5行,然后是第2行和3,4,5,第3行是4,第5行和第4行第5行,不与最后一行进行比较。
答案 0 :(得分:0)
我建议有点复杂的解决方案,但它演示了有用的matlab函数:
y=repmat(x,1,numel(x));
y==y'
因此,首先将列向量x
复制到方阵。如果x=[6;8;4;2;9]
,
y= 6 6 6 6 6
8 8 8 8 8
4 4 4 4 4
2 2 2 2 2
9 9 9 9 9
第二行y==y'
会将逐项矩阵y
与转置矩阵y'
进行比较。因此,您将获得squre矩阵a_ij
,其中a_ij=1
如果x(i)=x(j)
则为0
。
优点是您必须编写2个简短命令。
修改:在您发表评论后,代码应为:
y=repmat(x,1,numel(x));
a=y==y';
因此,矩阵a是这样的:a_ij=1
如果x(i)<x(j)
,则0
。为了做你想做的事,你可以在这个矩阵的上三角形(没有对角线值,总是为零)上使用for循环并打印结果。
y=repmat(x,1,numel(x));
a=y==y';
for i=1:numel(x-1)
for j=i+1:numel(x)
if a(i,j)
fprintf('value selected\n')
else
fprintf('value not selected\n')
end
end
end
实际上,如果您决定使用for循环,那么在for循环中执行所有操作会更容易,而无需进行矩阵计算:
for i=1:numel(x-1)
for j=i+1:numel(x)
if x(i)<x(j)
fprintf('value selected\n')
else
fprintf('value not selected\n')
end
end
end