使用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行。 –