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

我使用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
     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