在matlab中查找矩阵的多个对应行的索引
finding indices of multiple corresponding rows of a matrix in matlab
我有两个矩阵,我想在矩阵 B
中找到行的索引,这些行在矩阵 A
中具有相同的行值。让我举一个简单的例子:
A=[1,2,3; 2,3,4; 3,5,7; 1,2,3; 1,2,3; 5,8,6];
B=[1,2,3; 29,3,4; 3,59,7; 1,29,3; 1,2,3; 5,8,6;1,2,3];
例如矩阵A
中的第一行,矩阵B
中的row1、row5、row7是对应关系。
我写了下面的代码,但它不会 return 支持矩阵 A
中具有相同行值的所有索引,并且只支持其中一个(第 7 行)!!
A_sorted = sort(A,2,'descend'); % sorting angles
B_sorted = sort(B,2,'descend'); % sorting angles
[~,indx]=ismember(A_sorted,B_sorted,'rows')
结果是
indx_2 =
7
0
0
7
7
6
表示矩阵A
中的第一行,矩阵B
中只有一行(第7行)可用!!但是正如您所见,对于矩阵 A
中的第一行,矩阵 B
中有三个对应的行(第 1 行、第 5 行和第 7 行)
我认为最好的策略是将 ismember
应用于唯一行
%make matrix unique
[B_unique,B2,B3]=unique(B_sorted,'rows')
[~,indx]=ismember(A_sorted,B_unique,'rows')
%For each row in B_unique, get the corresponding indices in B_sorted
indx2=arrayfun(@(x)find(B3==x),indx,'uni',0)
如果要比较 A
和 B
之间的所有行对,请使用
E = squeeze(all(bsxfun(@eq, A, permute(B, [3 2 1])), 2));
或等同于
E = pdist2(A,B)==0;
在您的示例中,这给出了
E =
1 0 0 0 1 0 1
0 0 0 0 0 0 0
0 0 0 0 0 0 0
1 0 0 0 1 0 1
1 0 0 0 1 0 1
0 0 0 0 0 1 0
值 E(ia,ib)
告诉您 A
的第 ia
行是否等于 B
的第 ib
行。
我有两个矩阵,我想在矩阵 B
中找到行的索引,这些行在矩阵 A
中具有相同的行值。让我举一个简单的例子:
A=[1,2,3; 2,3,4; 3,5,7; 1,2,3; 1,2,3; 5,8,6];
B=[1,2,3; 29,3,4; 3,59,7; 1,29,3; 1,2,3; 5,8,6;1,2,3];
例如矩阵A
中的第一行,矩阵B
中的row1、row5、row7是对应关系。
我写了下面的代码,但它不会 return 支持矩阵 A
中具有相同行值的所有索引,并且只支持其中一个(第 7 行)!!
A_sorted = sort(A,2,'descend'); % sorting angles
B_sorted = sort(B,2,'descend'); % sorting angles
[~,indx]=ismember(A_sorted,B_sorted,'rows')
结果是
indx_2 =
7
0
0
7
7
6
表示矩阵A
中的第一行,矩阵B
中只有一行(第7行)可用!!但是正如您所见,对于矩阵 A
中的第一行,矩阵 B
中有三个对应的行(第 1 行、第 5 行和第 7 行)
我认为最好的策略是将 ismember
应用于唯一行
%make matrix unique
[B_unique,B2,B3]=unique(B_sorted,'rows')
[~,indx]=ismember(A_sorted,B_unique,'rows')
%For each row in B_unique, get the corresponding indices in B_sorted
indx2=arrayfun(@(x)find(B3==x),indx,'uni',0)
如果要比较 A
和 B
之间的所有行对,请使用
E = squeeze(all(bsxfun(@eq, A, permute(B, [3 2 1])), 2));
或等同于
E = pdist2(A,B)==0;
在您的示例中,这给出了
E =
1 0 0 0 1 0 1
0 0 0 0 0 0 0
0 0 0 0 0 0 0
1 0 0 0 1 0 1
1 0 0 0 1 0 1
0 0 0 0 0 1 0
值 E(ia,ib)
告诉您 A
的第 ia
行是否等于 B
的第 ib
行。