matrix formation from two given matrix
1 view (last 30 days)
Show older comments
Osman mamun
on 18 Apr 2014
Commented: Jos (10584)
on 18 Apr 2014
i want to form a diagonal matrix from two matrix, one contains the value of diagonal elements and other contains how many times it should occur.For example: a=[5 10 15] and b=[2 2 2] so the resultant matrix should look like r=[5 0 0 0 0 0;0 5 0 0 0 0;0 0 10 0 0 0;0 0 0 10 0 0;0 0 0 0 15 0;0 0 0 0 0 15]; But the problem is a and b can vary depending upon the situation or user input.
can i form such a matrix? I will highly appreciate any kind of suggestion.
Thanks, Mamun
0 Comments
Accepted Answer
Walter Roberson
on 18 Apr 2014
"for" loop around repmat() in order to build the diagonal vector, and then diag() that.
Or just use a nested "for" loop.
0 Comments
More Answers (3)
Andrei Bobrov
on 18 Apr 2014
Edited: Andrei Bobrov
on 18 Apr 2014
a=[5 10 15 20];
b=[2 1 4 3];
x = cumsum(b);
v = zeros(x(end),1);
v(x-b+1) = 1;
out = diag(a(cumsum(v)));
1 Comment
Jos (10584)
on 18 Apr 2014
A = [5 10 15 20] ;
B = [2 1 4 3] ;
C = arrayfun(@(k) A(k)*eye(B(k)),1:numel(A),'un',0) ;
result = blkdiag(C{:})
1 Comment
Jos (10584)
on 18 Apr 2014
Edited: Jos (10584)
on 18 Apr 2014
or using REPMAT and DIAG (which is therefore also, probably, more memory efficient):
A = [5 10 15 20] ;
B = [2 1 4 3]
C = arrayfun(@(k) repmat(A(k),1,B(k)), 1:numel(A),'un',0) ;
result2 = diag([C{:}])
See Also
Categories
Find more on Matrix Indexing 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!