使用sympy Matrix或numpy数组的sympy符号,如何使用元素智对数?如何在sympy中获取矩阵的元素对数?
举例来说,如果我有:
m=sympy.Matrix(sympy.symbols('a b c d'))
然后np.abs(m)
工作正常,但np.log(m)
不工作( “AttributeError错误:日志”)。
任何解决方案?
使用sympy Matrix或numpy数组的sympy符号,如何使用元素智对数?如何在sympy中获取矩阵的元素对数?
举例来说,如果我有:
m=sympy.Matrix(sympy.symbols('a b c d'))
然后np.abs(m)
工作正常,但np.log(m)
不工作( “AttributeError错误:日志”)。
任何解决方案?
使用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
,因为它执行的是数字日志,但您需要符号版本,即sympy.log
。
如果你想要的元素单元数,和你的矩阵都将是单柱,你就应该能够使用列表理解:
>>> 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)]])
谢谢 - 我猜没有矢量化的解决方案。我希望sympy可以很好地替代Matlab的符号,但是我看到sympy在处理矩阵方面还没有。 – Bitwise
请张贴确切的回溯。 –
@AshwiniChaudhary,这是我得到的确切回溯。 – Bitwise
Python的回溯通常是4-5行。 –