【问题标题】:Block diagonal matrix from columns从列中分块对角矩阵
【发布时间】:2016-02-19 22:37:19
【问题描述】:

假设我有一个 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]

【问题讨论】:

  • 你的例子不匹配,你最终得到 2m x n
  • 你是对的!修复!谢谢

标签: arrays matlab matrix


【解决方案1】:

这是一种方法:

  1. 使用mat2cellA 转换为其列的cell array
  2. 从该元胞数组生成comma-separated list,并将其用作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

这会产生

B =
     1     0
     3     0
     0     2
     0     4

【讨论】:

    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-22
      • 2015-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-16
      相关资源
      最近更新 更多