从列中阻止对角矩阵

Rui*_*lva 7 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]
Run Code Online (Sandbox Code Playgroud)

Lui*_*ndo 4

这是一个方法:

  1. 使用;转换A为其列的元胞数组mat2cell
  2. 从该元胞数组生成一个以逗号分隔的列表,并将其用作 的输入blkdiag

代码:

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
Run Code Online (Sandbox Code Playgroud)

这会产生

B =
     1     0
     3     0
     0     2
     0     4
Run Code Online (Sandbox Code Playgroud)