所有索引所以說我有兩個數組:使用列表中ismember
A:14 63 13
38 44 23
11 12 13
38 44 23
B:38 44 23
我試圖用ismember
返回那裏B
在A
發現每個位置的指數。我在網上找到的所有例子都只列出匹配的第一個或最後一個匹配項,我試着爲所有匹配的值設置一個列表索引,甚至重複匹配。由於
所有索引所以說我有兩個數組:使用列表中ismember
A:14 63 13
38 44 23
11 12 13
38 44 23
B:38 44 23
我試圖用ismember
返回那裏B
在A
發現每個位置的指數。我在網上找到的所有例子都只列出匹配的第一個或最後一個匹配項,我試着爲所有匹配的值設置一個列表索引,甚至重複匹配。由於
使用ismember
與'rows'
arugment:
ismember(A, B, 'rows')
導致邏輯陣列[0 1 0 1]
這通常是賭注之三比索引數組,但如果你想索引專門就用find
:
find(ismember(A,B,'rows'))
返回[2,4]
注意,此方法仍然有效,如果B
具有多行如B = [38 44 23; 11 12 13]
,它將返回[0; 1; 1; 1]
可以使用bsxfun
爲comarison:
idx = find(all(bsxfun(@eq, A, B), 2)); %// only where all line matches
結果與
idx =
2
4
這是shai's answer處理B
idx = find(any(all(bsxfun(@eq, A, permute(B,[3 2 1])), 2),3));
樣品試驗的多行只是一個改進版:
A = [14 63 13;
38 44 23;
11 12 13;
38 44 23];
B = [38 44 23;
11 12 13];
idx = find(any(all(bsxfun(@eq, A, permute(B,[3 2 1])), 2),3));
>> idx
idx =
2
3
4
你可以看看pdist2
如果您有A和B爲Nx3
大小的陣列 -
[indA,indB] = ind2sub([size(A,1) size(B,1)],find(pdist2(A,B)==0));
ind = [indA,indB]
因此,在ind
中,第一列匹配的成對索引代表A
的索引,第二列匹配B
。
採樣運行 -
A =
14 63 13
38 44 23
11 12 13
14 63 13
38 44 23
B =
38 44 23
14 63 13
ind =
2 1
5 1
1 2
4 2
'pdist2'解決方案在比較行明智的平等+1時非常優雅:) –
你期望的結果'[2〜4]'即使'B'是'[38 23 44]'?你不清楚! –