如何在MATLAB中使用数组掩码缩小矩阵?

Pyr*_*cal 4 arrays matlab mask matrix reshape

这似乎是我的一个非常普遍的问题:

data = [1 2 3; 4 5 6];
mask = [true false true];

mask = repmat(mask, 2, 1);

data(mask) ==> [1; 4; 3; 6]
Run Code Online (Sandbox Code Playgroud)

我想要的是[1 3; 4 6].

是的,我可以reshape把它调到合适的尺寸,但这似乎是错误的做法.有没有更好的办法?为什么data(mask)在矩阵实际为矩形时不返回矩阵?我理解在一般情况下它可能不是,但在我的情况下,因为我的原始掩码是一个数组,它总是如此.

推论

感谢您的回答,我也只是想指出这也适用于任何返回一个数字索引一样ismember,sortunique.

我曾经使用第二个返回值sort并手动将它应用于每一列,当你可以使用这个概念一次性完成它.

gno*_*ice 12

这会给你你想要的东西:

>> data = [1 2 3; 4 5 6];
>> mask = [true false true];
>> data(:,mask)

ans =

     1     3
     4     6
Run Code Online (Sandbox Code Playgroud)

这是有效的,因为您可以简单地将逻辑索引mask应用于列,选择所有行:.

即使将2-D逻辑数组用于输入,输出也将是索引值的列数组.这是因为无法保证索引元素可以组织成2-D(即矩形)输出.考虑一下你的2-D掩码是否如下:

mask = [true false true; true false false];
Run Code Online (Sandbox Code Playgroud)

这将索引3个值,除了输出的行或列向量之外,这些值不能组织成任何东西.这是另一个例子:

mask = [true true true; true false false];
Run Code Online (Sandbox Code Playgroud)

这将索引4个值,但3个来自第一行,1个来自第二行.如何将这些值整形为矩形输出矩阵?由于对于任意2-D索引矩阵一般没有明确的方法来执行此操作,因此返回索引值的列向量.