【问题标题】:How to make a big tridiagonal matrix with matrices?如何用矩阵制作一个大的三对角矩阵?
【发布时间】:2020-12-03 05:27:15
【问题描述】:

如何从两个较小的矩阵 H_0 和 H_1 生成矩阵 H,如附图所示?最终维度是有限的。

【问题讨论】:

    标签: python arrays matrix reshape diagonal


    【解决方案1】:

    这是一个例子。

    a = np.array([[1,2,3],[4,5,6]])
    b = np.ones(shape=(3,3))
    a_r = a.reshape((-1,))
    b_r = b.reshape((-1,))
    b_r_ = np.diag(b_r,k=1)
    
    b_r_ = b_r_ + b_r_.transpose()
    
    for i in range(b_r_.shape[0]):
      
      if i < len(a_r):
        b_r_[i][i]=a_r[i]
    
      else:
        b_r_[i][i]=0
    

    输出:

    array([[1., 1., 0., 0., 0., 0., 0., 0., 0., 0.],
           [1., 2., 1., 0., 0., 0., 0., 0., 0., 0.],
           [0., 1., 3., 1., 0., 0., 0., 0., 0., 0.],
           [0., 0., 1., 4., 1., 0., 0., 0., 0., 0.],
           [0., 0., 0., 1., 5., 1., 0., 0., 0., 0.],
           [0., 0., 0., 0., 1., 6., 1., 0., 0., 0.],
           [0., 0., 0., 0., 0., 1., 0., 1., 0., 0.],
           [0., 0., 0., 0., 0., 0., 1., 0., 1., 0.],
           [0., 0., 0., 0., 0., 0., 0., 1., 0., 1.],
           [0., 0., 0., 0., 0., 0., 0., 0., 1., 0.]])
    

    关注: 我认为这不是计算效率最高的方法,但我认为它有效

    【讨论】:

    • 这不是我的意思。 H_0 和 H_1 是矩阵。假设 H_0 是 m x m 矩阵。 H 的第一个块 m x m 块应该等于 H_0 。如果 H_1 也是 m x m; H 的第二个水平块应为 b H_1(从行 m+1 到 2m,列 1 到 m)。
    • 这听起来像是将两个矩阵堆叠在一起。我说对了吗?
    【解决方案2】:
    H = np.kron(np.eye(r,dtype=int),H_0) + np.kron(np.diag(np.ones(r-1), 1),H_1) + np.kron(np.diag(np.ones(r-1), -1),transpose(conj(H_1))) #r = repetition
    

    【讨论】:

      猜你喜欢
      • 2015-05-21
      • 2012-09-04
      • 1970-01-01
      • 1970-01-01
      • 2018-05-25
      • 1970-01-01
      • 2011-06-16
      • 1970-01-01
      • 2011-08-16
      相关资源
      最近更新 更多