How to create a matrix from multiples of submatrice?
    6 ビュー (過去 30 日間)
  
       古いコメントを表示
    
I would like to find a smarter way of building a larger matrix from vectors. The following code works fine:
rv = [1 2 3 4];
alpha =[0.0140;
    0.0100;
    0.0100;
    0.0100];
c = [];
for i = 1:4
    c = [c; diag(alpha).*rv(i)];
end
>> c =
    0.0140         0         0         0
         0    0.0100         0         0
         0         0    0.0100         0
         0         0         0    0.0100
    0.0280         0         0         0
         0    0.0200         0         0
         0         0    0.0200         0
         0         0         0    0.0200
    0.0420         0         0         0
         0    0.0300         0         0
         0         0    0.0300         0
         0         0         0    0.0300
    0.0560         0         0         0
         0    0.0400         0         0
         0         0    0.0400         0
         0         0         0    0.0400
Essentially I build a submatrix from a vector. Then I multiple the diagonal submatrix with each element of a vector. Then I concatenate these vertically.
Is there a computationally more efficient way of doing this?
Thanks!
0 件のコメント
採用された回答
  madhan ravi
      
      
 2020 年 6 月 11 日
        
      編集済み: madhan ravi
      
      
 2020 年 6 月 11 日
  
      Z = reshape(rv,1,1,[]) .* diag(Alpha);
Wanted = reshape(Z,numel(rv),[]).'
2 件のコメント
  Michael Soskind
      
 2020 年 6 月 11 日
				Even more confusing but with no tansposes and in one line:
repmat(diag(alpha),4,1).*reshape(repmat(rv, 4,4),[],4)
  madhan ravi
      
      
 2020 年 6 月 11 日
				
      編集済み: madhan ravi
      
      
 2020 年 6 月 11 日
  
			" and in one line"
Wanted = reshape(reshape(rv,1,1,[]) .* ...
    diag(Alpha),numel(rv),[]).'
"Even more confusing"
Why?
N = 1e6;
tic
for k = 1:N
    Z = reshape(rv,1,1,[]) .* diag(Alpha);
    Wanted = reshape(Z,numel(rv),[]).';
end
% Elapsed time is 4.847994 seconds.
toc
tic
for k = 1:N
    repmat(diag(alpha),4,1) .* reshape(repmat(rv, 4,4),[],4);
end
toc
% Elapsed time is 5.865444 seconds.
その他の回答 (0 件)
参考
カテゴリ
				Help Center および File Exchange で Creating and Concatenating Matrices についてさらに検索
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!


