我正在尝试填充矩阵的偏移对角线:
loss_matrix = np.zeros((125,125))
np.diagonal(loss_matrix, 3).fill(4)
ValueError: assignment destination is read-only
两个问题:
1)如果不迭代索引,如何设置numpy数组的偏移对角线?
2)为什么np.diagonal的结果只读? numpy.diagonal的文档读取:“在NumPy 1.10中,它将返回读/写视图,写入返回的数组将改变原始数组.”
np.__version__
'1.10.1'
解决方法:
根据NumPy问题跟踪器上的discussion判断,看起来该功能陷入了困境,他们从未解决过修复文档以说它被延迟了.
如果你需要可写性,你可以强迫它.这只适用于NumPy 1.9及更高版本,因为np.diagonal在较低版本上复制:
diag = np.diagonal(loss_matrix, 3)
# It's not writable. MAKE it writable.
diag.setflags(write=True)
diag.fill(4)