如何更改矩阵中的对角元素

时间:2019-03-27 15:12:45

标签: python-3.x

我正在尝试更改矩阵对角线(1)的元素,但是由于出现错误“分配目标是只读的”而无法执行。

x=np.loadtxt('matrice.txt')
print(x.diagonal(1)) #2
x.diagonal(1)[0]=3
ValueError: assignment destination is read-only

1 个答案:

答案 0 :(得分:0)

在numpy docs中表示diagonal

  

从NumPy 1.9开始,它将返回原始图像的只读视图   数组。尝试写入结果数组将产生一个   错误。

     

在将来的版本中,它将返回一个读/写视图并写入   返回的数组将更改您的原始数组。返回的   数组将具有与输入数组相同的类型。

     

如果您不写入此函数返回的数组,则您   可以忽略以上所有内容。

     

如果您依赖当前的行为,那么我们建议您复制   显式返回数组,即使用np.diagonal(a).copy()代替   只是np.diagonal(a)。这将适用于过去和将来的版本   NumPy。

因此,您应该使用np.diagonal(a).copy()来获取可修改的数组。

如果需要编辑矩阵的对角线,可以使用this answer by Hans Then

def kth_diag_indices(a, k):
    rows, cols = np.diag_indices_from(a)
    if k < 0:
        return rows[-k:], cols[:k]
    elif k > 0:
        return rows[:-k], cols[k:]
    else:
        return rows, cols

x[kth_diag_indices(x,1)] = 2 # to make them all equal to 2