Matlab 查找矩阵中向量元素的列位置
给定向量如Matlab 查找矩阵中向量元素的列位置,matlab,matrix,indices,Matlab,Matrix,Indices,给定向量如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))) 或者,如果您希望避免挤压和任何- [~
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)))
或者,如果您希望避免挤压和任何-
[~,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);
我对此有点困惑,为什么期望的输出向量是permute
函数的参数?@siegel haha我没有将输入输入到它<代码>[1 3 2]
是我正在用置换移动的维度。因此,有了它,我告诉它交换dim-2和dim-3,保持dim-1不变。对于b=magic(4)
和a=[5,6,2,1]
,您希望得到什么输出?rayryeng和Divakar都实现了一些不同的功能,您的示例碰巧返回了相同的功能。嗨,Daniel,我希望您发布的示例使用1,3,2,4
。谢谢你注意到这一点!