用matlab比较matlab中的数组

时间:2014-07-13 14:14:59

标签: arrays matlab compare equality

我想在逐个元素的MATLAB中比较多个数组;如果它们在任何位置相等,则增加计数。 (即整个数组不必相等,只要比较发现第一次的元素相等就足够了。前A=[1 2 3]B=[4 2 5],这里位置2等于。)< / p>

我尝试isequal(A,B):比较所有元素并返回Count 10; 但isequal(A[i], B[i]);无法逐个比较数字。

请您提出任何解决方案..

4 个答案:

答案 0 :(得分:0)

使用索引计数器逐个遍历数组的索引并逐个比较数组的元素。

答案 1 :(得分:0)

根据你的问题,我不确定你想要什么。我假设,给定一组具有相同列数的行向量,您希望知道多少所有这些向量具有相同的值(但值每列可以有所不同。)

我还假设您的数据采用矩阵行的形式,例如

 data = [ 1 2 9 3 5
          4 5 9 3 5 
          7 8 9 2 5 ];

然后:

result = sum(all(diff(data)==0));

在这种情况下,结果为2,因为在两个列(第三和第五)列满足相等条件。


如果要查找第一个列的索引,其中至少两个行具有相同的值:

 result = find(any(diff(sort(data))==0),1);

例如,

data = [ 1 8 9 3 5
         4 5 9 3 5 
         7 8 9 2 5 ];

会给2,因为第二列是第一列具有相同值。

答案 2 :(得分:0)

尝试:

if(sum(A == B))
    % increment your counter
end;

编辑:

为什么它起作用:(A == B)返回一个新数组,其中一个数组在a和B上具有相同的值,否则为0。 “Sum”对这个新数组求和,如果该和不为零(即A和B在同一个地方至少有一个共同值),则触发“if”。否则sum返回零,if语句将其视为“false”。

答案 3 :(得分:0)

如果你有3个大小相同的阵列(A,B和C),而你只是想知道你的等号在哪里,你可以使用:

R(:,:,1) = bsxfun(@eq,A,B);
R(:,:,2) = bsxfun(@eq,C,B);
R(:,:,3) = bsxfun(@eq,A,C);
IDX = find(R);
[Rows,Columns,~] = ind2sub(size(R),IDX);

这将为您提供两个向量,包含所有等式的行和列位置。我尝试使用数组:

A = [4 6 2 4
     3 5 4 4];
B = [6 2 6 3 
     2 1 4 4];
C = [4 4 4 2
     4 5 6 1];

得到了

Rows = [2 2 1 2]
Columns = [3 4 1 2]

与各种平等的位置相关。如果要查找第一个位置,只需运行:

CL = min(Columns);
RW = min(Rows(Columns == CL));

这将为您提供第一个相等的行列索引。在上面的示例中,它提供了RW = 1, CL = 1