查找不在另一个数组中的数组中的元素

use*_*790 7 matlab

我有两个数组让我们说A = [1; 2; 4; 7; 10; 20]; B = [1; 4; 8];

现在我想找到A的元素,它们不在B中; [2; 7; 10; 20].我只需要它们的索引是A中元素[2; 7; 10; 20]的索引.我怎样才能在matlab中实现它.我可以使用循环和所有.但这不是我想要的.我想要一个优雅的解决方案 建议?

Heb*_*odo 9

你可以使用这个ismember功能.

A = [1;2;4;7;10;20]; 
B = [1;4;8];
ismem = ismember(A,B);
Run Code Online (Sandbox Code Playgroud)

会给你

[1 0 1 0 0 0]'
Run Code Online (Sandbox Code Playgroud)

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

find(ismem==0)
Run Code Online (Sandbox Code Playgroud)

作为提醒,您可以始终使用逻辑索引,如下所示:

A(~ismem)
Run Code Online (Sandbox Code Playgroud)

会给你

[2 7 10 20]'
Run Code Online (Sandbox Code Playgroud)


jam*_*jam 5

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

setdiff(A,B)给出[2; 7; 10; 20](向量 A 中删除了 B 中的元素)

如果您想要元素的索引而不是它们的值,则可以使用ismember并对结果取反。