基于多列的数组过滤器

时间:2014-10-06 21:24:22

标签: arrays matlab matrix

假设我有一个4 x n数组:

A =    [1 2 3 4; ...
        2 4 8 9; ...
        6 7 9 4; ...
        1 8 3 4];

我想根据前两列的内容过滤整个数组。

例如,如果我想返回前两列中包含2的数组行,我正在寻找的答案是L

R = [1 2 3 4;...
     2 4 8 9];

或者,如果我想在前两列中返回包含1的行,我正在寻找的答案是......

A = [1 2 3 4;...
     1 8 3 4];

我确定这很明显,但我怎么能在MATLAB中做到这一点?根据{{​​1}}或评估命令(例如find)过滤整个数组是完全没问题的。它是基于多列的过滤,无论如何我都无法理解。

1 个答案:

答案 0 :(得分:3)

要检查给定的数字,只需将any沿第二维应用于所需的列,然后将其用作logical index来选择所需的行:< / p>

cols = [1 2]; %// columns to look at
val = 1; %// value to look for
R = A(any(A(:, cols)==val, 2), :);

例如,如果您要查找多个值,请选择第1列或第2列中包含2或3的所有行:使用ismember代替==

cols = [1 2]; %// columns to look at
vals = [2 3]; %// values to look for
R = A(any(ismember(A(:, cols), vals), 2), :);

如果您想检查数字是否在范围内

cols = [1 2]; %// columns to look at
v1 = 6; %// numbers should be greater or equal to this...
v2 = 8; %// ...and less than this
R = A(any(A(:, cols)>=v1, 2) & any(A(:, cols)<v2, 2), :);