我正在尝试更改矩阵对角线(1)的元素,但是由于出现错误“分配目标是只读的”而无法执行。
x=np.loadtxt('matrice.txt')
print(x.diagonal(1)) #2
x.diagonal(1)[0]=3
ValueError: assignment destination is read-only
答案 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