How can I make all the variables in an array 0 after the first time 0 occurs in the array

I am trying to create a weighting function based on a set of criteria. When the weighting function is created, I get an array containing 1's and 0's. However, I am trying to force the array to be all 0's once the first 0 occurs.
For example: x = [1,1,1,1,1,0,0,1,1,0,0,0...] for which I would then like it to read x = [1,1,1,1,1,0,0,0,0,0,0,0...].
Any tips would be greatly appreciated.

回答 (2 件)

Guillaume
Guillaume 2016 年 1 月 20 日
A very simple solution that only works with an array of 0 and 1 starting with 1:
x = [1,1,1,1,1,0,0,1,1,0,0,0]
cumprod(x)

2 件のコメント

I find in practice that most of the time that I want to do this, I want to work row by row; in that case I need to be sure to specify the dimension number,
cumprod(x,2)
Without a leading one:
>> x = [0,0,1,1,1,1,1,0,0,1,1,0,0,1,0]
x =
0 0 1 1 1 1 1 0 0 1 1 0 0 1 0
>> x .* (1==cumsum(0<diff([0,x])))
ans =
0 0 1 1 1 1 1 0 0 0 0 0 0 0 0
jgg
jgg 2016 年 1 月 20 日
Generate your x as normal, with the many 1's afterwards then call:
x = [1,1,1,1,1,0,0,1,1,0,0,0]; %generate x
x(find(x == 0,1,'first'):end) = 0

2 件のコメント

Nick Pera
Nick Pera 2016 年 1 月 20 日
great!! worked perfectly. thank you!
jgg
jgg 2016 年 1 月 21 日
Accept this answer if it solved your problems so other can use it!

この質問は閉じられています。

タグ

質問済み:

2016 年 1 月 20 日

閉鎖済み:

2021 年 8 月 20 日

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by