2012-11-22 281 views
1

我有兩個數組讓我們說A = [1; 2; 4; 7; 10; 20]; B = [1; 4; 8];查找陣列中不在另一個陣列中的元素

現在我想找到A中不屬於B的元素,即: [2; 7; 10; 20]。我只需要它們的索引,它是A中元素[2; 7; 10; 20]的索引。我如何在matlab中實現它。我可以使用循環和所有。但那不是我想要的。我想要一個優雅的解決方案建議?

+0

可能重複的[Matlab陣列操作](http://stackoverflow.com/questions/5802276/matlab-array-operation) –

回答

4

您可以使用ismember函數來做到這一點。

A = [1;2;4;7;10;20]; 
B = [1;4;8]; 
ismem = ismember(A,B); 

會給你

[1 0 1 0 0 0]' 

如果你真的需要索引,您可以使用find

find(ismem==0) 

正如一個提醒,你可以隨時使用邏輯索引像這樣:

A(~ismem) 

會給你

[2 7 10 20]' 
+1

[TF ,LOC] = ismember(A,S)返回與A相同大小的數組,其中A的元素在集合S中,否則返回0。在LOC中提供匹配的索引,其中包含S中對於S中的每個元素的S中的最高絕對索引,並且如果不存在這樣的索引,則爲0。 – argyris

3

如果您想要A中不在B中的元素,您可以使用setdiff

如果您需要元素的索引而不是它們的值,可以使用ismember並取反結果。

3

退房setxor

[C,IA ,ib] = setxor(A,B)

Here是Mathworks頁面。你會想ia爲那些在A,但不是B的索引。

相關問題