给出一个像a = [2 5 9]
这样的向量和一个矩阵,如
8 11 5
b = 2 6 1
4 9 3
找到b
的哪一列包含a
的每个元素的最佳方法是什么?在此示例中,我希望输出[1 3 2]
,因为2
位于第一列,5
位于第三列,9
位于第二列柱。出于我的目的,可以安全地假设一个数字只能出现在一列中。
答案 0 :(得分:4)
一种方法 -
[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)))
答案 1 :(得分:3)
另一种方法是使用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
答案 2 :(得分:2)
另一种方法:
[~, index] = ismember(a, b);
[row, col] = ind2sub(size(b, 1), index);