想象一下有一个矩阵数组(nxkxk),如何返回对角线条目,同时使用for循环保持原始形状without.
例如,在不保持原始形状的情况下,我们可以做np.diagonal(array_of_matrices, axis1=1, axis2=2)
显然我可以这样做,然后重建原始形状,但我想知道是否有更干净的方法.
我什么也没try 过,已经没有主意了.np.diag
不接受axis
个论点.
想象一下有一个矩阵数组(nxkxk),如何返回对角线条目,同时使用for循环保持原始形状without.
例如,在不保持原始形状的情况下,我们可以做np.diagonal(array_of_matrices, axis1=1, axis2=2)
显然我可以这样做,然后重建原始形状,但我想知道是否有更干净的方法.
我什么也没try 过,已经没有主意了.np.diag
不接受axis
个论点.
您可以使用广播将eye
矩阵乘以k x n x n
形状的数组,以仅返回对角线元素.
import numpy as np
n = 4
k = 3
arr = np.arange(k * n * n).reshape(k, n, n)
diags = arr * np.eye(n)
以下是要素:
arr
# returns:
array([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]],
[[16, 17, 18, 19],
[20, 21, 22, 23],
[24, 25, 26, 27],
[28, 29, 30, 31]],
[[32, 33, 34, 35],
[36, 37, 38, 39],
[40, 41, 42, 43],
[44, 45, 46, 47]]])
diags
# returns:
array([[[ 0., 0., 0., 0.],
[ 0., 5., 0., 0.],
[ 0., 0., 10., 0.],
[ 0., 0., 0., 15.]],
[[16., 0., 0., 0.],
[ 0., 21., 0., 0.],
[ 0., 0., 26., 0.],
[ 0., 0., 0., 31.]],
[[32., 0., 0., 0.],
[ 0., 37., 0., 0.],
[ 0., 0., 42., 0.],
[ 0., 0., 0., 47.]]])