如何处理由sympy Matrix或numpy数组中的sympy符号构成的内容,以取得逐个元素的对数?
例如,如果我有:
m=sympy.Matrix(sympy.symbols('a b c d'))
然后
np.abs(m)
可以正常工作,但是np.log(m)
无法工作("AttributeError:log")。有解决方案吗?
如何处理由sympy Matrix或numpy数组中的sympy符号构成的内容,以取得逐个元素的对数?
例如,如果我有:
m=sympy.Matrix(sympy.symbols('a b c d'))
np.abs(m)
可以正常工作,但是np.log(m)
无法工作("AttributeError:log")。Matrix.applyfunc
:In [6]: M = sympy.Matrix(sympy.symbols('a b c d'))
In [7]: M.applyfunc(sympy.log)
Out[7]:
⎡log(a)⎤
⎢ ⎥
⎢log(b)⎥
⎢ ⎥
⎢log(c)⎥
⎢ ⎥
⎣log(d)⎦
您不能使用np.log
,因为它执行的是数字log运算,但您需要符号版本,即sympy.log
。
log(base)
,所以log(x, y)
就相当于 log(x)/log(y)
。因此在这种情况下,可以使用 M.applyfunc(sympy.log)/sympy.log(base)
。 - asmeurer>>> m = sympy.Matrix(sympy.symbols('a b c d'))
>>> logm = sympy.Matrix([sympy.log(x) for x in m])
>>> logm
Matrix([
[log(a)],
[log(b)],
[log(c)],
[log(d)]])
>>> def sp_log(m):
return sympy.Matrix([sympy.log(x) for x in m])
>>> sp_log(m)
Matrix([
[log(a)],
[log(b)],
[log(c)],
[log(d)]])
numpy.log
。 - senshin