python - 使用 np.diag 分配移动的对角线值

标签 python numpy numpy-ndarray diagonal

我正在尝试为矩阵的多个对角线赋值。例如,我有这个矩阵:

>>> u = np.zeros(25).reshape(5, 5)
>>> u
array([[0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0.]])

我想为上面的第 $k$ 条对角线赋值。例如,如果 $k=1$,我想要主对角线上方的对角线。我试图通过使用像这样的 np.diag 来实现这一点 np.diag(u, k=1) = 1 我想得到以下结果:

>>> u
array([[0., 1., 0., 0., 0.],
       [0., 0., 1., 0., 0.],
       [0., 0., 0., 1., 0.],
       [0., 0., 0., 0., 1.],
       [0., 0., 0., 0., 0.]])

问题是这会抛出一个 SyntaxError: can't assign to function call 因为这又是 Python。但是 np.diag 返回对原始矩阵的引用,如您所见:

>>> np.may_share_memory(np.diag(u, k=1), u)
True

我该怎么做?提前谢谢你。

最佳答案

你可以使用

u[np.eye(len(u), k=1, dtype='bool')] = 1
print(u)

输出:

[[0. 1. 0. 0. 0.]
 [0. 0. 1. 0. 0.]
 [0. 0. 0. 1. 0.]
 [0. 0. 0. 0. 1.]
 [0. 0. 0. 0. 0.]]

关于python - 使用 np.diag 分配移动的对角线值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65299295/

相关文章:

python - 如何根据目标像素替换 Numpy 图像数组中的所有 RGB 值

python - 国际化 - Python MySQLDb 和 ISO-8859-7

python - 如何让 matplotlib 的 imshow 生成图像而不被绘制

python - 多次快速切片 numpy 数组

python - Numpy.sum() 将 (2,2,2...n) 的 nD 数组转换为形状 (2,) 的 1D 数组

python - 有没有办法不计算不必要的金额来节省时间?

python - 绘制多类的 ROC 但出现错误 'too many indices'

python - PyTorch DataLoader 对并行运行的批处理使用相同的随机种子

python - 如何设置多包 Python 应用程序?

python - 维度为 1 的 numpy 数组与没有该维度的 numpy 数组有什么区别