MATLAB: Reducing nonzero values in vector and adding to subsequent zero values.

large vectorzero and nonzero values

I have a large vector of mostly zeros. I wish to divide the nonzero values by a value of N, and then add the divided value to the subsequent N-1 zero values. For example, if my vector is [….0 0 15 0 0 0 0 0 0 0….] and N=5, I want it to come out [….0 0 3 3 3 3 3 0 0 0….]. Thank-you for any tips!

Best Answer

This works:
vector = [0 0 15 0 0 0 0 0 0 0 4 0 0 0 0 0 0 9 0]
N=5
nonZeroIndexes = find(vector ~= 0)
for k = 1 : length(nonZeroIndexes);
index1 = nonZeroIndexes(k)
index2 = min(index1 + N - 1, length(vector))
vector(index1 : index2) = vector(index1)/N;
end
% Display
vector
For max robustness, you'll have to define what you want to do in the case where two non-zero numbers are separated by less than N elements. It's not clear how you want to handle that.