扩展 python 函数来处理 sympy 符号
Extend python function to handle sympy symbols
给定一个为数值编写的现有函数,Sympy 是否有建议的方法来扩展它处理符号?例如:
import numpy as np
def foo(ax, ay, az):
A = np.matrix([[1. , ax, 0],
[0 , 1./ay, 0],
[0 , 0, np.cos(az)]])
return A
foo(1, 2, 3)
# We want this to work too:
import sympy as spy
ax, ay, az = spy.symbols(('ax', 'ay', 'az'))
foo(ax, ay, az)
如何扩展 foo()
来处理 sympy 符号 ax, ay, az
,从而 return 一个符号矩阵 A
? sympy 是否有任何实用程序可以帮助解决这个问题?
不幸的是,您无法在 numpy 函数中处理 sympy 符号。一个肮脏的解决方案是检查变量的类型并决定使用哪个函数。
import numpy as np
import sympy as spy
def foo(ax, ay, az):
A = np.matrix([[1., ax, 0 ],
[0 , 1./ay, 0 ],
[0 , 0 , spy.cos(az) if type(az) is spy.Symbol else np.cos(az)]])
return A
print foo(1, 2, 3)
ax, ay, az = spy.symbols(('ax', 'ay', 'az'))
print foo(ax, ay, az)
>>>
[[ 1. 1. 0. ]
[ 0. 0.5 0. ]
[ 0. 0. -0.9899925]]
[[1.0 ax 0]
[0 1.0/ay 0]
[0 0 cos(az)]]
给定一个为数值编写的现有函数,Sympy 是否有建议的方法来扩展它处理符号?例如:
import numpy as np
def foo(ax, ay, az):
A = np.matrix([[1. , ax, 0],
[0 , 1./ay, 0],
[0 , 0, np.cos(az)]])
return A
foo(1, 2, 3)
# We want this to work too:
import sympy as spy
ax, ay, az = spy.symbols(('ax', 'ay', 'az'))
foo(ax, ay, az)
如何扩展 foo()
来处理 sympy 符号 ax, ay, az
,从而 return 一个符号矩阵 A
? sympy 是否有任何实用程序可以帮助解决这个问题?
不幸的是,您无法在 numpy 函数中处理 sympy 符号。一个肮脏的解决方案是检查变量的类型并决定使用哪个函数。
import numpy as np
import sympy as spy
def foo(ax, ay, az):
A = np.matrix([[1., ax, 0 ],
[0 , 1./ay, 0 ],
[0 , 0 , spy.cos(az) if type(az) is spy.Symbol else np.cos(az)]])
return A
print foo(1, 2, 3)
ax, ay, az = spy.symbols(('ax', 'ay', 'az'))
print foo(ax, ay, az)
>>>
[[ 1. 1. 0. ]
[ 0. 0.5 0. ]
[ 0. 0. -0.9899925]]
[[1.0 ax 0]
[0 1.0/ay 0]
[0 0 cos(az)]]