我想在逐个元素的MATLAB中比较多个数组;如果它们在任何位置相等,则增加计数。 (即整个数组不必相等,只要比较发现第一次的元素相等就足够了。前A=[1 2 3]
,B=[4 2 5]
,这里位置2
等于。)< / p>
我尝试isequal(A,B)
:比较所有元素并返回Count 1
或0
;
但isequal(A[i], B[i]);
无法逐个比较数字。
请您提出任何解决方案..
答案 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