Matlab:根据同一向量上的if-else条件更改向量值

时间:2017-07-04 01:17:48

标签: matlab if-statement vector

我有一个阈值要求,并希望将向量的值舍入为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

1 个答案:

答案 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),您需要两个命令来进行分配。