简体   繁体   English

从列中阻止对角矩阵

[英]Block diagonal matrix from columns

Suppose I have an mxn matrix A . 假设我有一个mxn矩阵A.
Is there a way to create B , a (nxm) xn matrix whose "diagonal" is formed by A 's columns ? 有没有办法创建B ,一个(nxm) xn矩阵,其“对角线”由A的列组成?

Example: 例:

A = [1 2;
     3 4]  

B = [1 0;
     3 0;
     0 2;
     0 4]

Here is a way: 这是一种方式:

  1. Convert A to a cell array of its columns, using mat2cell ; 使用mat2cellA转换为其列的单元数组 ;
  2. From that cell array generate a comma-separated list , and use it as an input to blkdiag . 从该单元格数组生成以逗号分隔的列表 ,并将其用作blkdiag的输入。

Code: 码:

A = [1 2; 3 4];                                   %// example data
C = mat2cell(A, size(A,1), ones(1,size(A,2)));    %// step 1
B = blkdiag(C{:});                                %// step 2

This produces 这产生了

B =
     1     0
     3     0
     0     2
     0     4

Here is a short script to accomplish this. 这是一个完成此任务的简短脚本。 It works for any dimensions of A. 它适用于任何尺寸的A.

A=[1 2; 3 4];
[R C] = size(A);

for i=1:C
    B( 1+R*(i-1) : R*i , i ) = A(:,i);
end

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM