matrix formation from two given matrix

1 次查看(过去 30 天)
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

采纳的回答

Walter Roberson
Walter Roberson 2014-4-18
"for" loop around repmat() in order to build the diagonal vector, and then diag() that.
Or just use a nested "for" loop.

更多回答(3 个)

Andrei Bobrov
Andrei Bobrov 2014-4-18
编辑:Andrei Bobrov 2014-4-18
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)));

Jos (10584)
Jos (10584) 2014-4-18
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 个评论
Jos (10584)
Jos (10584) 2014-4-18
编辑:Jos (10584) 2014-4-18
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{:}])

请先登录,再进行评论。


Osman mamun
Osman mamun 2014-4-18
thanks, i was looking for something like repmat.

类别

Help CenterFile Exchange 中查找有关 Matrix Indexing 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by