Replace jth zero in vector with j

2 次查看(过去 30 天)
I would like to take a vector x as an input and (assuming that it has 0s), replace each 0 with the index of zero that it is. For example: >> x = [1 0 2 4 -3 0 3 0]; Would turn into: >>x_new = [1 1 2 4 -3 2 3 3]; Here is my code so far:
z = length(find(x==0)); count = 1;
for i=1:z
x(find(x==0))=count;
count = count + 1;
end;
This code just replaces all of the 0 elements with a 2. I want it to go through and count the zeroes off, and I am not sure at all where I am going wrong...
Any Thoughts?
Thanks!

采纳的回答

Mohammad Abouali
Mohammad Abouali 2014-9-27
zeroMask = (x==0);
x(zeroMask) = 1:sum(zeroMask);

更多回答(1 个)

Youssef  Khmou
Youssef Khmou 2014-9-27
try :
x = [1 0 2 4 -3 0 3 0];
y=x;
[a,b]=find(x==0);
y(b)=b;
  2 个评论
Scott
Scott 2014-9-27
That code gives me a new vector y that has all of the zeroes replaced by the index of that zero in the vector. i.e:
>>x=[1 0 2 4 -3 0 3 0]; >>y=[1 2 2 4 -3 6 3 8]
which is close, but not quite what i am looking for
Geoff Hayes
Geoff Hayes 2014-9-27
Rather than assigning b as the result, just do the following
y(b) = 1:length(b);
as 1:length(b) will produce a vector with the same length as b with values in the order of 1,2,3,..

请先登录,再进行评论。

标签

Community Treasure Hunt

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

Start Hunting!

Translated by