假设我有一个像这样的数组
mat = np.array([[1,1],[2,2],[3,3]])
其形状为 (3,2)。我想通过获取数组的最后一个轴并从中创建对角矩阵来创建形状为 (3,2,2) 的新数组。我可以用 for 循环来做到这一点
mat2 = np.zeros((3,2,2))
for i in np.arange(0,3):
mat2[i] = np.diag(mat[i])
Run Code Online (Sandbox Code Playgroud)
产生所需的输出
[[[1. 0.]
[0. 1.]]
[[2. 0.]
[0. 2.]]
[[3. 0.]
[0. 3.]]]
Run Code Online (Sandbox Code Playgroud)
但是有没有办法在直接矢量化(更快?!)版本中做到这一点?在我的实际问题中,我有一个形状为 (...,n) 的大型高维数组,需要将最后一个轴转换为最后形状为 (...,n,n) 的对角矩阵。