How to create a matrix from given vectors
Show older comments
I have a vector A= [ 2 4 1 3 ]
How can you create a matrix which are the length of the vector values with ones. the rest zeros?
i.e I want
B= [1 1 1 1; 1 1 0 1; 0 1 0 1; 0 1 0 0]
Regards
jason
Accepted Answer
More Answers (2)
Here is the obligatory one liner. It works whether or not A has a zero.
D = cumsum(ones(max(A),length(A))) <= A(ones(1,max(A)),:);
Or (slower but memory efficient):
D = bsxfun(@(x,y) x<=y,(1:max(A)).',A);
1 Comment
Andrei Bobrov
on 25 Oct 2012
+1
Azzi Abdelmalek
on 25 Oct 2012
Edited: Azzi Abdelmalek
on 25 Oct 2012
A= [ 2 4 1 3 ];
n=length(A);
s=meshgrid(1:n);
out=cell2mat(arrayfun(@(x,y) y<=A(x),s,s','un',0))
5 Comments
Jason
on 25 Oct 2012
Azzi Abdelmalek
on 25 Oct 2012
there are no 4, just one: out
Jason
on 25 Oct 2012
Jason
on 25 Oct 2012
Azzi Abdelmalek
on 25 Oct 2012
just extract
out(:,1:3)
Categories
Find more on Creating and Concatenating Matrices in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!