将行值与其余行进行比较

时间:2015-02-20 19:05:04

标签: matlab matrix

我有一个5x1矩阵,比如x=[6;8;4;2;9],我想要做的是比较第1行和第2,3,4,5行,然后是第2行和3,4,5,第3行是4,第5行和第4行第5行,不与最后一行进行比较。

1 个答案:

答案 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
相关问题