填充numpy数组的对角线失败

rya*_*yan 3 python arrays numpy diagonal

我正在尝试填充矩阵的偏移对角线:

loss_matrix = np.zeros((125,125))

np.diagonal(loss_matrix, 3).fill(4)

ValueError: assignment destination is read-only
Run Code Online (Sandbox Code Playgroud)

两个问题:

1)如果不迭代索引,如何设置numpy数组的偏移对角线?

2)为什么结果np.diagonal只读?numpy.diagonal的文档读取:"在NumPy 1.10中,它将返回读/写视图,写入返回的数组将改变原始数组."

np.__version__

'1.10.1'
Run Code Online (Sandbox Code Playgroud)

use*_*ica 7

从对NumPy问题跟踪器的讨论来看,看起来这个功能陷入了困境,他们从来没有解决过这个问题,因为它说它被推迟了.

如果你需要可写性,你可以强迫它.这只适用于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)
Run Code Online (Sandbox Code Playgroud)