这似乎是我的一个非常普遍的问题:
data = [1 2 3; 4 5 6]; mask = [true false true]; mask = repmat(mask, 2, 1); data(mask) ==> [1; 4; 3; 6] 我想要的是[1 3; 4 6] 。
是的,我可以只reshape它的大小合适,但似乎错误的方式来做到这一点。有没有更好的办法?为什么data(mask)实际为矩形时不返回矩阵?我了解一般情况下可能并非如此,但就我而言,由于我的原始蒙版是一个数组,因此它将一直如此。
推论
感谢您的回答,我只想指出一点,这也适用于任何返回数字索引的内容,例如ismember , sort或unique 。
我曾经从sort获取第二个返回值,并在可以使用此概念一次完成一次时将其手动应用于每列。
回答:
这将给您您想要的:
>> data = [1 2 3; 4 5 6]; >> mask = [true false true]; >> data(:,mask) ans = 1 3 4 6 之所以可行,是因为您可以简单地将逻辑索引mask应用于列,并使用:选择所有行。
即使将二维逻辑数组用于输入,输出也将是索引值的列数组。这是因为不能保证可以将索引元素组织为二维(即矩形)输出。考虑一下您的2-D蒙版是否如下:
mask = [true false true; true false false]; 这将索引3个值,这些值除了输出的行向量或列向量之外,不能组织成其他任何形式。这是另一个例子:
mask = [true true true; true false false]; 这将索引4个值,但是3个来自第一行,而1个来自第二行。这些值应如何成形为矩形输出矩阵?由于通常没有明确的方法对任意二维索引矩阵执行此操作,因此将返回索引值的列向量。
更多&回答...