gpt4 book ai didi

python - 使用 SymPy 对符号矩阵表达式求幂

转载 作者:太空宇宙 更新时间:2023-11-04 04:40:39 25 4
gpt4 key购买 nike

我正在尝试使用 SymPy 以符号形式处理多元正态分布。但是,它似乎无法意识到我想要取幂的矩阵表达式求值为标量。这是代码:

from sympy import *
# Sample size, number of covariates
n, k = symbols('n k')
# Data
X = MatrixSymbol('X', n, k)
y = MatrixSymbol('y', n, 1)
# Parameters
beta = MatrixSymbol('beta', k, 1)
Sigma = MatrixSymbol('Sigma', n, n)
# Exponent expression, OK:
(-Rational(1, 2)*(y - X*beta).T*Sigma*(y - X*beta))
# Trying to use as exponent, not OK:
exp(-Rational(1, 2)*(y - X*beta).T*Sigma*(y - X*beta))

错误信息如下:

---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-76-62c854b75962> in <module>()
----> 1 exp((-Rational(1, 2)*(y - X*beta).T*Sigma*(y - X*beta)))

D:\Programming\Anaconda3\lib\site-packages\sympy\core\function.py in __new__(cls, *args, **options)
425
426 evaluate = options.get('evaluate', global_evaluate[0])
--> 427 result = super(Function, cls).__new__(cls, *args, **options)
428 if not evaluate or not isinstance(result, cls):
429 return result

D:\Programming\Anaconda3\lib\site-packages\sympy\core\function.py in __new__(cls, *args, **options)
248
249 if evaluate:
--> 250 evaluated = cls.eval(*args)
251 if evaluated is not None:
252 return evaluated

D:\Programming\Anaconda3\lib\site-packages\sympy\functions\elementary\exponential.py in eval(cls, arg)
300
301 elif arg.is_Matrix:
--> 302 return arg.exp()
303
304 @property

AttributeError: 'MatMul' object has no attribute 'exp'

最佳答案

指数函数不支持矩阵表达式;它需要一个显式矩阵,这意味着一个具有确定条目(可以是符号)的确定大小的矩阵。要从矩阵表达式中获取显式矩阵,请使用 as_explicit 方法。

exp((-Rational(1, 2)*(y - X*beta).T*Sigma*(y - X*beta)).as_explicit())

返回一个1乘1的矩阵,即

Matrix([[exp(Sum(-y[_k, 0]*Sum(Sigma[_k, _k]*y[_k, 0], (_k, 0, n - 1)) + y[_k, 0]*Sum(Sigma[_k, _k]*Sum(X[_k, _k]*beta[_k, 0], (_k, 0, k - 1)), (_k, 0, n - 1)) + Sum(Sigma[_k, _k]*y[_k, 0], (_k, 0, n - 1))*Sum(X[_k, _k]*beta[_k, 0], (_k, 0, k - 1)) - Sum(Sigma[_k, _k]*Sum(X[_k, _k]*beta[_k, 0], (_k, 0, k - 1)), (_k, 0, n - 1))*Sum(X[_k, _k]*beta[_k, 0], (_k, 0, k - 1)), (_k, 0, n - 1))/2)]])

或者你可以做

exp((-Rational(1, 2)*(y - X*beta).T*Sigma*(y - X*beta)).as_explicit()[0, 0])

从 1 x 1 矩阵下降到标量。

关于python - 使用 SymPy 对符号矩阵表达式求幂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50710258/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com