查找矩阵内向量元素的列位置

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)))

或者如果您想避免 squeezeany -

[~,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);