假设我有一个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
)过滤整个数组是完全没问题的。它是基于多列的过滤,无论如何我都无法理解。
答案 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), :);