从列中阻止对角矩阵

时间:2016-02-19 22:37:19

标签: arrays matlab matrix

假设我有一个m x n矩阵A. 有没有办法创建B(n x m) x n矩阵的“对角线”由A的列组成?

示例:

A = [1 2;
     3 4]  

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

2 个答案:

答案 0 :(得分:4)

这是一种方式:

  1. 使用cell arrayA转换为其mat2cell列;
  2. 从该单元格数组生成comma-separated list,并将其用作blkdiag的输入。
  3. 代码:

    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
    

    这会产生

    B =
         1     0
         3     0
         0     2
         0     4
    

答案 1 :(得分:2)

这是一个完成此任务的简短脚本。它适用于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