我想知道是否有可能在numpy中的这部分代码中优化dotproduts和数组转换,根据profiler,这部分代码占用了我代码运行时间的95%。(我不想使用f2py、cython或pyOpenCl,我只是在学习如何有效地使用numpy)
def evalSeriesInBasi(a,B):
Y = dot(a,B[0])
dY = dot(a,B[1])
ddY = dot(a,B[2])
return array([Y,dY,ddY])
def evalPolarForces( R, O ):
# numexpr doest seem to help it takes 3,644 vs. 1.910 with pure numpy
G = 1.0 / (R[0]**2) # Gravitational force
F_O = R[0] * O[2] + 2 * R[1] * O[1] # Angular Kinematic Force = Angular engine thrust
F_R = R[0] * O[1]**2 + R[2]
FTR = F_R - G
FT2 = F_O**2 + FTR**2 # Square of Total engine Trust Force ( corespons to propelant consuption for power limited variable specific impulse engine)
return array([F_O,F_R,G,FTR, FT2])
def evalTrajectoryPolar( Rt0, Ot0, Bs, Rc, Oc ):
Rt = Rt0 + evalSeriesInBasi(Rc,Bs)
Ot = Ot0 + evalSeriesInBasi(Oc,Bs)
Ft = evalPolarForces( Rt, Ot )
return Ot, Rt, Ft
其中“B”是存储基函数的形状(3,32128)数组,“a”是这些基函数的系数,而所有其他数组(如Y、dY、ddY、F_O、FüR、G、FTR、FT2)是某个函数在128个采样点的值
据profiler说numpy.core.multiarray.数组和numpy.core公司._多特布拉斯.dot在
^{pr2}$
您可以通过删除
array()
调用来加快计算速度,下面是一个示例:
^{pr2}$f1()
和f2()
的结果相同,但速度不同:结果是:
怎么样:
相关问题 更多 >
编程相关推荐