拥有一个 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]
。我怎样才能实现这个目标?
可以使用
np.eye
遮罩来完成。
zeros = np.zeros((3,4,6))
vectors = np.random.randint(1 , 9, (3, 4)) # Generating random 3x4 integer array between 1 and 9
mask = np.eye(zeros.shape[1], zeros.shape[2], dtype=bool)
zeros[:, mask] = vectors
这是
print(zeros)
的输出。
[[[2. 0. 0. 0. 0. 0.]
[0. 4. 0. 0. 0. 0.]
[0. 0. 7. 0. 0. 0.]
[0. 0. 0. 4. 0. 0.]]
[[7. 0. 0. 0. 0. 0.]
[0. 4. 0. 0. 0. 0.]
[0. 0. 3. 0. 0. 0.]
[0. 0. 0. 6. 0. 0.]]
[[3. 0. 0. 0. 0. 0.]
[0. 5. 0. 0. 0. 0.]
[0. 0. 1. 0. 0. 0.]
[0. 0. 0. 3. 0. 0.]]]