检查第一次出现的向量中的任何元素是否存在于矩阵中的正确方法是什么?例如,如果我有
A = [1, 3]
和
B = [ 1, 2 ;
1, 4 ;
2, 3 ;
2, 4 ;
3, 4 ];
我应该得到一些东西,它返回满足这个条件的矩阵B的索引。所以我应该得到这个例子。
indx = [1,1]
我正在使用MATLAB R2012a
答案 0 :(得分:3)
您可以使用ismember
:
vec=ismember(A,B);
或
vec=ismember(B,A)
取决于你想要的东西(A的元素在B中找到,反之亦然)。 那么你可以
[row col]=find(vec,1, 'first')
获取索引位置
答案 1 :(得分:2)
必须尝试在Matlab中使用strfind
命令。
您可以尝试这样的事情:
res = strfind(B(:)',A)
这将给出B中A的所有出现。因此,第一次出现的是res(1)
希望有所帮助
答案 2 :(得分:1)
要在矩阵A
中搜索向量B
的所有元素,您可以使用bsxfun
:
tmp = bsxfun( @eq, B(:), A );
此比较忽略B
的矩阵形状,并将其视为一堆元素。在您的示例中,B
包含10
个元素,A
包含2
,因此tmp
是二进制矩阵,其大小为{{1} } 10x2
只要true
等于B
的元素。
要查找A
的第一个元素,其等于B
的任何元素,您只需执行
A
将线性索引idx = find( any( tmp, 2 ), 1, 'first' );
转换为行对列转换为idx
B
干杯!