我有一个像这样的矩阵:
line=[1 3 5 0 0 4 2;
1 3 8 0 8 2 2 ]
我想比较此矩阵中的行。如果第一行的第一列与第二行的第一列相同,则增加一个计数器。但是,如果该值为零,则不应增加计数器。
对于上面的示例,我希望输出匹配= 3 匹配值为1,3,2,所以match = 3
答案 0 :(得分:2)
我会这样做:
match = sum((line(1, :) == line(2, :)) & (line(1, :) != 0))
Array comparison line(1, :) == line(2, :)
将在两行具有相同值的点上为您提供(逻辑)1
:
ans =
1 1 0 1 0 0 1
接下来,您需要排除可能的0
值。这可以通过仅在第一行(line(1, :) != 0
)中使用findind非零元素,然后对结果使用&
运算符来完成。您会得到:
ans =
1 1 0 0 0 0 1
最后,您只需要使用sum
进行计数即可。
答案 1 :(得分:2)
您可以检查每一列的总和除以第一行是否等于2。
所以:
count = sum(sum(x)./x(1,:)==2)
由于不确定0/0
,因此不会考虑0。