发生我有随机数的向量:从点设置所有矢量值为零,当第一负值在Matlab
x = [8,5,4,2,-1,-3,-4,2,3];
我想所有的矢量值设置为零,从点当第一个负值出现时。因此我想得到以下结果:
x = [8,5,4,2,0,0,0,0,0];
我该如何去实现这个目标? 谢谢!
发生我有随机数的向量:从点设置所有矢量值为零,当第一负值在Matlab
x = [8,5,4,2,-1,-3,-4,2,3];
我想所有的矢量值设置为零,从点当第一个负值出现时。因此我想得到以下结果:
x = [8,5,4,2,0,0,0,0,0];
我该如何去实现这个目标? 谢谢!
ind = find(x<0, 1, 'first')
x(ind:end) = 0;
或者把它全部成一行
x(find(x<0, 1, 'first'):end)= 0;
另一种方式
x(cumsum(x<0)>0) = 0;
做x(find(x<0,1):end) = 0
。首先,使用find
获得第一个小于零的元素的索引i。然后,您将0分配给所有索引,直到数组的末尾。
这里是一个可能的解决方案:
>> [m,idx]=max(x<0);
>> y = x;
>> y(idx:end)=0
y =
8 5 4 2 0 0 0 0 0
的'cumsum'做法似乎是对于小于〜4000个元素的矢量最快! +1,nice =) – 2014-10-03 08:31:31