代码之家  ›  专栏  ›  技术社区  ›  lighting

如何在matlab中将矩阵赋给另一个矩阵的对角线

  •  -2
  • lighting  · 技术社区  · 6 年前

    我有一个矩阵 D = zeros (30, 432); 我想分配 d = [ 1 1 0 0; 0 0 1 1; 0 0 0 0]; 矩阵d的对角线。我有下面的代码,但它不允许我为d中的每个对角线值分配d。

    [N,~,P,Q]=size(D);
    diagIndex=repmat(logical(eye(N)),[1 1 P Q]);
    D(diagIndex)=d;
    

    30x432矩阵的输出如下:

    d 0 0 0
    0 d 0 0
    0 0 d 0
    0 0 0 d
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   rahnema1    6 年前

    你可以用 spdiags 创建对角线 [10 x 108] 稀疏矩阵然后使用 kron 缩放和填充矩阵。

    d = [ 1 1 0 0; 0 0 1 1; 0 0 0 0]
    size_D=[30, 432];
    sz = size_D./size(d);
    diagonal = spdiags(ones(sz(1),1),0,sz(1),sz(2));
    result = kron(diagonal ,d);