查找矩阵内向量元素的列位置
Find column locations of vector elements inside a matrix
给定一个向量 a = [2 5 9]
和一个矩阵
8 11 5
b = 2 6 1
4 9 3
查找 b
的哪一列包含 a
的每个元素的最佳方法是什么?在这个例子中,我想要一个像 [1 3 2]
这样的输出,因为 2
在第一列,5
在第三列,而 9
在第二列。出于我的目的,可以安全地假设一个数字只能出现在一列中。
一种方法-
[colID,~] = find(squeeze(any(bsxfun(@eq,b,permute(a,[1 3 2])),1)))
或者如果您想避免 squeeze
和 any
-
[~,colID,~] = ind2sub([size(b) numel(a)],find(bsxfun(@eq,b(:),a)))
另一种方法是使用 ismember
:
A = [2 5 9];
B = [8 11 5; 2 6 1; 4 9 3];
[~, ind] = ismember(A,B);
[~, col] = ind2sub(size(B), ind)
col =
1 3 2
另一种方法:
[~, index] = ismember(a, b);
[row, col] = ind2sub(size(b, 1), index);
给定一个向量 a = [2 5 9]
和一个矩阵
8 11 5
b = 2 6 1
4 9 3
查找 b
的哪一列包含 a
的每个元素的最佳方法是什么?在这个例子中,我想要一个像 [1 3 2]
这样的输出,因为 2
在第一列,5
在第三列,而 9
在第二列。出于我的目的,可以安全地假设一个数字只能出现在一列中。
一种方法-
[colID,~] = find(squeeze(any(bsxfun(@eq,b,permute(a,[1 3 2])),1)))
或者如果您想避免 squeeze
和 any
-
[~,colID,~] = ind2sub([size(b) numel(a)],find(bsxfun(@eq,b(:),a)))
另一种方法是使用 ismember
:
A = [2 5 9];
B = [8 11 5; 2 6 1; 4 9 3];
[~, ind] = ismember(A,B);
[~, col] = ind2sub(size(B), ind)
col =
1 3 2
另一种方法:
[~, index] = ismember(a, b);
[row, col] = ind2sub(size(b, 1), index);