我有一个阈值要求,并希望将向量的值舍入为0或1.我不需要保存向量的旧值
我在下面的链接中看到,我可以使用以下内容将s
向量中的所有0值更改为-1 s( s==0 )=-1
;或者一般vector(if condition) = desiredValue
。
这比使用for循环并具有封闭的if条件更好。如果我想包含另一个条件怎么办:将所有大于0.8的值更改为1?我是否需要添加另一行代码:s( s>=0.8 )=1
;或者有没有办法通过遍历矢量一次来检查这两个条件?我只知道使用带有if-else条件的for循环,但是如果存在则需要更短的版本。
https://www.mathworks.com/matlabcentral/newsreader/view_thread/158413
我找到的唯一相关链接是R,但我没有使用它:Change vector value based on value in same vector
答案 0 :(得分:2)
Matlab允许所谓的逻辑索引,这非常有效。要了解什么
s(s>0.8) = 1;
可以,您可以通过两个步骤进行检查:
ind = s>0.8;
此处 ind 是一个逻辑数组,其大小与 s 相同,并且在s大于0.8的位置为true(1),false(0)否则。
s(ind) = 1;
会在 ind 为真的位置将 s 分配给1,而不会触及 ind 为false的位置。
为了便于理解,您可以这样做:
ind = find(ind);
这将返回s> 0.8的索引。然后你做
s(ind) = 1;
逻辑索引允许您跳过 find ,这使代码更简单,更快。
要更改为不同的值(示例中为-1和1),您需要两个命令来进行分配。