gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 19:49:48 26 4
gpt4 key购买 nike

这似乎是我的一个很常见的问题:

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) 不返回实际上是矩形的矩阵?我知道在一般情况下可能不是,但在我的情况下,因为我的原始掩码是一个数组,所以它总是会是。

推论

感谢您的回答,我还想指出这也适用于返回数字索引的任何东西,例如 ismembersortunique.

我过去常常从 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 个来自第二行。应该如何将这些值整形为矩形输出矩阵?由于对于任意二维索引矩阵通常没有明确的方法来执行此操作,因此返回索引值的列向量。

关于matlab - 如何在 MATLAB 中使用数组掩码缩小矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2739584/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com