MATLAB Answers

How can i create N copies of a vector based on nonzero values in that vector?

1 view (last 30 days)
Mohab Mostafa
Mohab Mostafa on 30 Nov 2015
Edited: Mohab Mostafa on 30 Nov 2015
I have a vector 1x5 which contain NZ nonzero values, what can i do if i want to create N copies of that vector such that each copy contains only 1 nonzero value from NZ?
Original Vector [1 0 5 0 3]
Copy 1 [1 0 0 0 0] Copy 2 [0 0 5 0 0] Copy 3 [0 0 0 0 3]

  0 Comments

Sign in to comment.

Accepted Answer

Jan
Jan on 30 Nov 2015
v = [1 0 5 0 3];
Elem = unique(v(v~=0));
nElem = numel(Elem);
Result = cell(1, nElem);
for k = 1:nElem
Result{k} = v .* (v == Elem(k));
end

  1 Comment

Mohab Mostafa
Mohab Mostafa on 30 Nov 2015
Great this is very good, what if i have a 64x1 vector and i want to have 4 nonzero in each copy (of course if there is a 27 nonzero values in the original vector, the last copy will contain only 3)

Sign in to comment.

More Answers (1)

William
William on 30 Nov 2015
not elegant but:
Original_Vector=[1 0 5 0 3];
Copy_1=Original_Vector;
Copy_1(3)=0;
Copy_1(5)=0;
etc..

  1 Comment

Mohab Mostafa
Mohab Mostafa on 30 Nov 2015
I was giving that vector as an example, i don't know the index of the nonzero values, and vector might be larger than that

Sign in to comment.

Sign in to answer this question.


Translated by