Info

この質問は閉じられています。 編集または回答するには再度開いてください。

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

1 回表示 (過去 30 日間)
Nick Pera
Nick Pera 2016 年 1 月 20 日
閉鎖済み: MATLAB Answer Bot 2021 年 8 月 20 日
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 件のコメント
Walter Roberson
Walter Roberson 2016 年 1 月 21 日
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)
Stephen23
Stephen23 2016 年 1 月 21 日
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!

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

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by