【发布时间】:2022-10-21 08:28:50
【问题描述】:
所以我在下面有以下代码。
L = np.array([1,2,3])
M = np.array([1,2,3])
Q = np.random.uniform(0,10,size=(3,3))
S = Q.T*Q
print(sp.stats.multivariate_normal.pdf(L,M,S))
显然S 是一个对称的半正定矩阵。我可以用线性代数理论证明它。但是,scipy 抱怨说在运行上述代码时不是这样。我能做些什么来解决这个问题?
【问题讨论】:
-
您是否使用
*运算符作为矩阵乘法?这是元素明智的乘法。 -
通常,当我使用
*运算符时,它会被 python 解释为矩阵乘法。 -
它不会(除非您使用类
matrix,但现在不推荐)。使用@运算符进行矩阵乘法。对于传统的 numpy 数组,*运算符始终执行元素乘法。 -
我懂了。我猜当矩阵的维度相同时,它会被解释为元素乘法。谢谢!
-
“我猜当矩阵的维度相同时……”决定这一点的不是维度的数量。它是对象类型你正在使用的。 NumPy 有
ndarray对象(这是np.array(...)创建的),*是元素乘法,matrix对象,*是矩阵乘法。请注意,matrix对象正在经历(缓慢但稳定)的弃用。
标签: python numpy scipy linear-algebra scipy.stats