matlab:如何比较两个矩阵,以获得元素之间的不同索引
我使用Matlab处理非常大的多维相似矩阵,我想找出它们之间的差异 这两个矩阵的大小相同 以下是一个例子:matlab:如何比较两个矩阵,以获得元素之间的不同索引,matlab,matrix,find,comparison,difference,Matlab,Matrix,Find,Comparison,Difference,我使用Matlab处理非常大的多维相似矩阵,我想找出它们之间的差异 这两个矩阵的大小相同 以下是一个例子: A(:,:,1) = 1 1 1 1 1 1 1 1 1 A(:,:,2) = 1 1 1 1 1 1 1 1 1 A(:,:,3) = 1 1 1 1 1 1
A(:,:,1) =
1 1 1
1 1 1
1 1 1
A(:,:,2) =
1 1 1
1 1 1
1 1 1
A(:,:,3) =
1 1 1
1 1 1
1 1 1
B(:,:,1) =
1 1 99
1 1 99
1 1 1
B(:,:,2) =
1 1 1
1 1 1
1 1 1
B(:,:,3) =
1 1 99
1 1 1
1 1 1
我需要一个函数,该函数为我提供不同值的索引,在本例中,这将是:
output =
1 3 1
1 3 3
2 3 1
我知道我可以使用像find(B~=A)
或find(~ismember(B,A))
这样的函数,我不知道如何将它们的输出更改为我想要的索引
谢谢大家! 你几乎说对了!请记住,查找要检查的布尔条件在矩阵(或向量)中满足的位置的列主要索引。如果需要实际的行/列/切片位置,则需要使用。你可以这样称呼它:
%// To reproduce your problem
A = ones(3,3,3);
B = ones(3,3,3);
B(7:8) = 99;
B(25) = 99;
%// This is what you call
[row,col,dim] = ind2sub(size(A), find(A ~= B));
ind2sub
的第一个参数是搜索位置的矩阵大小。由于A
的维度等于B
,我们可以选择A
或B
作为第一个输入,并使用来帮助我们确定矩阵的大小。第二个输入是我们想要访问矩阵的列主要索引。这些只是find
的结果
row
、col
和dim
将为您提供3D矩阵中元素不相等的行、列和切片。还要注意,这些将是列向量,因为find
的输出将生成列主索引的列向量。因此,我们可以将每个列向量连接到单个矩阵中,并显示您的信息。因此:
locations = [row col dim];
disp(locations);
1 3 1
2 3 1
1 3 3
因此,此矩阵的第一列告诉您矩阵值不相等的行位置,此矩阵的第二列告诉您矩阵值不相等的列位置,最后第三列告诉您矩阵值不相等的切片。因此,我们在这个矩阵中有三个不相等的点,分别位于(1,3,1)、(2,3,1)
和(1,3,3)
。请注意,由于find
的性质,这是未排序的,因为它首先在矩阵的列中搜索。如果您想像在示例输出中一样对其进行排序,请使用。如果我们这样做,我们会得到:
sortrows(locations)
ans =
1 3 1
1 3 3
2 3 1