2014-01-16 98 views
4

使用sympy Matrix或numpy數組的sympy符號,如何使用元素智對數?如何在sympy中獲取矩陣的元素對數?

舉例來說,如果我有:

m=sympy.Matrix(sympy.symbols('a b c d')) 

然後np.abs(m)工作正常,但np.log(m)不工作( 「AttributeError錯誤:日誌」)。

任何解決方案?

+0

請張貼確切的回溯。 –

+0

@AshwiniChaudhary,這是我得到的確切回溯。 – Bitwise

+0

Python的回溯通常是4-5行。 –

回答

3

使用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

+0

嘿,剛纔看到你是sympy的首席開發者 - 尊敬!做得好。如果矩陣矢量化更類似於Matlab符號工具箱,那將是非常棒的。 – Bitwise

+0

好吧,我沒有編寫大部分代碼。有很多貢獻者。 – asmeurer

+0

如果您有任何建議讓它更好,請告訴我們。 – asmeurer

1

如果你想要的元素單元數,和你的矩陣都將是單柱,你就應該能夠使用列表理解:

>>> 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)]]) 
+0

謝謝 - 我猜沒有矢量化的解決方案。我希望sympy可以很好地替代Matlab的符號,但是我看到sympy在處理矩陣方面還沒有。 – Bitwise