【问题标题】:Numpy adding values to diagonalsNumpy将值添加到对角线
【发布时间】:2019-01-18 04:39:55
【问题描述】:

我希望创建一个 NxN numpy 数组,其中仅填充主对角线上方的所有内容。 它的填充方式是主对角线(k=0)用gamma**0填充,k=1对角线用gamma**1填充,k=2对角线用gamma**2填充等等...

gamma = 0.9
dim = 4

M = np.zeros((dim,dim))
for i in range(dim)[::-1]:   
    M += np.diagflat([gamma**(dim-i-1)]*(i+1),dim-i-1) 

print(M)

这正确给出了

array([[ 1.   ,  0.9  ,  0.81 ,  0.729],
       [ 0.   ,  1.   ,  0.9  ,  0.81 ],
       [ 0.   ,  0.   ,  1.   ,  0.9  ],
       [ 0.   ,  0.   ,  0.   ,  1.   ]])

我想问是否有任何更简单或优雅的方式来处理这个或不同的东西。我将经常处理多维数组,我希望从不同的工具和方法中获得灵感。

【问题讨论】:

    标签: python numpy matrix multidimensional-array


    【解决方案1】:

    一种方法是使用np.triu_indices 创建上三角索引,然后使用advanced indexing 为这些位置分配值:

    M = np.zeros((dim,dim))
    
    rowidx, colidx = np.triu_indices(dim)
    # the diagonal offset can be calculated by subtracting the row index from column index
    M[rowidx, colidx] = gamma ** (colidx - rowidx) 
    
    M
    #array([[ 1.   ,  0.9  ,  0.81 ,  0.729],
    #       [ 0.   ,  1.   ,  0.9  ,  0.81 ],
    #       [ 0.   ,  0.   ,  1.   ,  0.9  ],
    #       [ 0.   ,  0.   ,  0.   ,  1.   ]])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-01
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      • 2012-04-15
      • 2021-05-11
      相关资源
      最近更新 更多