从Matlab中出现第一个负值的点开始,将所有矢量值设置为零

时间:2014-10-03 08:08:25

标签: matlab

我有一个随机数的向量:

x = [8,5,4,2,-1,-3,-4,2,3];

我想将所有向量值设置为零,从第一个负值出现时开始。因此,我希望得到以下结果:

x = [8,5,4,2,0,0,0,0,0];

我如何实现这一目标? 谢谢!

3 个答案:

答案 0 :(得分:7)

ind = find(x<0, 1, 'first')
x(ind:end) = 0;

或者把它全部放在一行

x(find(x<0, 1, 'first'):end)= 0;

另一种方式

x(cumsum(x<0)>0) = 0;

答案 1 :(得分:3)

x(find(x<0,1):end) = 0。首先,使用find获得第一个小于零的元素的索引i。然后为所有索引i指定0直到数组的末尾。

答案 2 :(得分:3)

这是一个可能的解决方案:

>> [m,idx]=max(x<0);
>> y = x;
>> y(idx:end)=0
y =

   8   5   4   2   0   0   0   0   0