用向量填充 3D numpy 数组中每个矩阵的对角线

问题描述 投票:0回答:1

拥有一个 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]
。我怎样才能实现这个目标?

python arrays numpy matrix diagonal
1个回答
0
投票

可以使用

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.]]]
© www.soinside.com 2019 - 2024. All rights reserved.