Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 其它 > 资料存档
资料存档 资料存档
回复
 
主题工具 显示模式
旧 2019-12-10, 20:41   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 如何在MATLAB中使用数组掩码缩小矩阵?

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

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



更多&回答...
poster 当前离线   回复时引用此帖
回复

主题工具
显示模式

发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛禁用 表情符号
论坛启用 [IMG] 代码
论坛启用 HTML 代码



所有时间均为北京时间。现在的时间是 01:21


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.