我对SymPy相当陌生,并且有一个可能是基本问题。或者我可能只是误解了应该如何使用 SymPy。
有没有办法创建一个不是由原子表示,而是由其他表达式组合的表达式?
例子:
>>> from sympy.physics.units import *
>>> expr1 = m/s
>>> expr2 = mile/hour
>>> expr1
m/s
>>> expr2
1397*m/(3125*s)
>>> expr1.in_terms_of([mile,hour]) #in my dreams?
3125*mile/(1397*hour)
>>>
附带说明:我可以找到完整 SymPy 文档的“官方”PDF(或其他可打印)版本吗?(我在工作中受到严格的互联网使用限制,并且厌倦了周末在家工作。)
更新:
这就是我最终遵循 Prelude 的建议的结果,但是它不太可能像这样被广泛使用,因为它感觉很脏。欢迎评论和WTF。
def in_terms_of(self, terms):
expr2 = eval(str(self), physics.units.__dict__)
converter = {}
for term in terms:
term_expr = physics.units.__dict__[term]
coeff = term_expr.as_coeff_terms()[0]
unit = physics.units.Unit('my_'+term, term)
converter[term_expr/coeff] = unit/coeff
return str(expr2.subs(converter))
用法:
>>> x = in_terms_of('J',['gram','mile','hour'])
>>> x
'9765625000*mile**2*gram/(1951609*hour**2)'
>>> in_terms_of(x,['J'])
'J'