有一个3D numpy数组,其中每个2D切片代表一个单独的矩阵。我想用一组特定的值来替换每个矩阵的对角元素。
例如,如果我有一个3x3x3
数组:
array([[[a1, a2, a3],
[a4, a5, a6],
[a7, a8, a9]],
[[b1, b2, b3],
[b4, b5, b6],
[b7, b8, b9]],
[[c1, c2, c3],
[c4, c5, c6],
[c7, c8, c9]]])
我想用每个矩阵的一组新值替换对角线[a1, a5, a9]
、[b1, b5, b9]
和[c1, c5, c9]
。我如何才能做到这一点?
4条答案
按热度按时间oaxa6hgo1#
使用integer index:
7gs2gvoe2#
可以使用
np.eye
掩码。下面是
print(zeros)
的输出。zynd9foi3#
您可以手工创建索引以进行直接索引:
输出量:
中间体:
lg40wkob4#
将来,当numpy实现下面描述的功能时,这将是一行程序。在此之前,您需要使用其他答案中所示的索引或掩码方法。
numpy.diagonal
的文档(从v1.25开始)说:从NumPy 1.9开始,它返回原始数组的只读视图。尝试写入结果数组将产生错误。
在未来的版本中,它将返回一个读/写视图,写入返回的数组将改变您的原始数组。返回的数组将具有与输入数组相同的类型。
在numpy的未来版本中,您应该能够直接写入
np.diagonal
返回的视图。