【发布时间】:2012-10-08 12:26:59
【问题描述】:
我有一组矩阵,我只想提取满足条件的矩阵的一部分。
例如:150x180 矩阵的值从0 到2.80,我只想要1.66 和1.77 之间的值
我想将范围内的值保留在原始矩阵中的原始位置,并将另一个设置为零。
谁能帮帮我。
谢谢
【问题讨论】:
我有一组矩阵,我只想提取满足条件的矩阵的一部分。
例如:150x180 矩阵的值从0 到2.80,我只想要1.66 和1.77 之间的值
我想将范围内的值保留在原始矩阵中的原始位置,并将另一个设置为零。
谁能帮帮我。
谢谢
【问题讨论】:
您可以使用逻辑索引。首先,找到不满足您条件的A 条目。接下来,使用A(idx) 将它们更改为 0:
% example matrix
A = 2.8*rand(150, 180);
% find entries meeting some criterion
idx = A<1.66 | A>1.77;
A(idx) = 0;
或者更简单,正如 Rody Oldenhuis 建议的那样,您可以将逻辑表达式直接包含在矩阵引用中:
A(A<1.66 | A>1.77) = 0;
这会产生更短更简洁的代码,但不是更快的代码:MATLAB 仍显式创建逻辑索引变量,但随后将其清除。
【讨论】:
A(A<1.66|A>1.77) = 0
idx中索引的显式存储,所以你可以跳过clear idx。