Info

La pregunta está cerrada. Vuélvala a abrir para editarla o responderla.

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

1 visualización (últimos 30 días)
Nick Pera el 20 de En. de 2016
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.

Respuestas (2)

Guillaume el 20 de En. de 2016
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 comentariosMostrar NingunoOcultar Ninguno
Walter Roberson el 21 de En. de 2016
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 el 21 de En. de 2016
>> 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 el 20 de En. de 2016
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 comentariosMostrar NingunoOcultar Ninguno
Nick Pera el 20 de En. de 2016
great!! worked perfectly. thank you!
jgg el 21 de En. de 2016
Accept this answer if it solved your problems so other can use it!