發生我有隨機數的向量:從點設置所有矢量值爲零,當第一負值在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