将numpy中的对角化扩展到2维以上

将numpy中的对角化扩展到2维以上,numpy,matrix,Numpy,Matrix,我有一个向量 >>> import numpy as np >>> v = np.array([1, 2, 3]) 在努比。我们使用np.diag从这个向量创建一个对角矩阵,得到以下结果 [[1, 0, 0], [0, 2, 0], [0, 0, 3]] 但是,如中所述,np.diag函数仅适用于一维和二维矩阵。 如果v的元素本身是nxmnp数组怎么办?如何方便快速地对那个数组进行对角化?来吧,重点是我们将有nxm大小的零矩阵,而不是0 这就是我想要的:

我有一个向量

>>> import numpy as np
>>> v = np.array([1, 2, 3]) 
在努比。我们使用
np.diag
从这个向量创建一个对角矩阵,得到以下结果

[[1, 0, 0],
[0, 2, 0],
[0, 0, 3]]
但是,如中所述,
np.diag
函数仅适用于一维和二维矩阵。 如果
v
的元素本身是
nxm
np数组怎么办?如何方便快速地对那个数组进行对角化?来吧,重点是我们将有
nxm
大小的零矩阵,而不是0

这就是我想要的:

Q = [Q1, Q2, Q3, Q4, Q5]
其中
Q_i
nxm
矩阵,即
Q_i.shape=(n,m)
。因此,
Q
的形状是
(5,n,m)
。 现在我想要一个对角矩阵:

Q_diag =
[[Q1 0 0 0 0]
[0 Q2 0 0 0]
[0 0 Q3 0 0]
[0 0 0 Q4 0]
[0 0 0 0 Q5]]

0
实际上本身就是
nxm
矩阵,也就是说,具有
(n,m)
的形状。所以在所有的形状中,Q_diag都是Q_diag.shape=(5,5,n,m)。

几分钟前你刚刚问过这个问题。好的,它被标记为重复,但是你应该在评论中提出你的对象,而不是重复同样的问题。你需要更清楚地解释你需要什么。准确地展示你的期望。如果我们不知道慢是什么,我们就不能帮助快速。我们想要对向量的元素进行对角化,元素本身就是numpy数组。np.diag不允许你这么做。是的,它不应该使用Python的for循环,因为这些循环效率很低,比我们提出的任何本机numpy实现慢300倍。我还在等待一个工作示例——即使它使用了那些可怕的循环。