OHL*_*ÁLÁ 7 python numpy sympy
我有以下代码:
p = classp();
for i in range(1,10):
x = numpy.array([[2],[4],[5]])
print p.update(x)
class classp:
def __init__(self):
self.mymodel = array([2*x[1]], [3*x[0]], [x[2]]);
def update(self, x):
return self.mymodel #replace x(0)...x(1) with the given parameter
Run Code Online (Sandbox Code Playgroud)
我的问题与上面的代码有关,我想在可能的情况下使用sympy定义一个模型,然后在更新函数中用x值替换sympy变量.可能吗?我怎样才能做到这一点?
Kra*_*nov 12
我可以为你提出两个解决方案.
首先,DeferedVector创建用于lambdify:
In [1]: from sympy.matrices import DeferredVector
In [2]: v = DeferredVector('v')
In [3]: func = lambdify(v, Matrix([v[1], 2*v[2]]))
In [4]: func(np.array([10,20,30]))
Out[4]:
[[20]
[60]]
Run Code Online (Sandbox Code Playgroud)
然而lambdify对我的口味来说太过神奇了.
另一种选择是使用该.subs方法:
In [11]: x1, x2, x3 = symbols('x1:4')
In [12]: m = Matrix([x2,2*x1,x3/2])
In [13]: m.subs({x1:10, x2:20, x3:30})
Out[13]:
?20?
? ?
?20?
? ?
?15?
Run Code Online (Sandbox Code Playgroud)
你可以像这样为替换创建字典:
dict(zip(symbols('x1:4'), your_value_array)).
不要忘记所有的返回对象都是同情矩阵.要将它们转换为numpy数组,只需使用np.array(the_matrix_in_question)并且不要忘记指定dtype,否则它将默认为dtype=object.