我试图使用SciPy Weave来加速Python代码中的循环密集型任务,我将从MatLab进行翻译。在MatLab中,我竭尽全力地将它运行起来,它运行速度非常快。我已经在Python中使用循环尝试了它并且速度慢得令人无法接受,所以虽然我可以做我在MatLab中使用NumPy所做的事情并且让它以同样快的速度运行我想要学习使用Weave因为它会真的在将来有用。我在这里查看了我的C ++工作:http://ideone.com/E8ACaq(第一个注释上方的变量是我传递给编织的那些变量)并且我有更简单的编织工作示例,但我无法获得编织球的实际代码!
我需要知道的是我的变量需要采用什么格式才能进入和退出。理想情况下,我想要一个numpy数组,我想传递各种整数,numpy数组和双精度,如下所示(Python缩进未显示,因为代码在这里如何工作)。
def GoodManLookup(CycleData,MaterialID,Materials):
nCyc=len(CycleData)
NRVals=int(Materials[MaterialID]['rvalues'])
NLevels=np.product(Materials[MaterialID]['levels'].shape)
GoodmanAmp=Materials[MaterialID]['data'][:,1]
GoodmanMean=Materials[MaterialID]['data'][:,0]
RValAngles=np.array([np.arctan2(GoodmanData[0:NRVals,1],GoodmanData[0:NRVals,0])*180/math.pi])
CycleAngles=np.arctan2(CycleData[:,0],CycleData[:,1])*180/math.pi
CycleAngles[CycleAngles==180]=179.99
CycleAngles[CycleAngles==90]=89.99
CycleAngles[CycleAngles==0]=0.01
#Get sector of each cycle
SectB=np.tile(RValAngles[0,0:NRVals-1],(nCyc,1))
SectT=np.tile(RValAngles[0,1:NRVals],(nCyc,1))
Angles=np.tile(np.array([CycleAngles]).swapaxes(1,0),(1,NRVals-1))
Sect=np.array([np.sum(np.bitwise_and(Angles>SectB,Angles<SectT)*np.tile(np.array([range(0,NRVals-1)]),(nCyc,1)),axis=1)]).swapaxes(1,0)
Amplitude=CycleData[:,0];
Mean=CycleData[:,1];
N=Materials[MaterialID]['levels'];
if CurveFit==1:
PowerLaw=True
elif CurveFit==0:
PowerLaw=False
code_cpp ="""//code on IDE one
"""
P = weave.inline(code_cpp,['Sect','Amplitude','Mean','nCyc','NLevels','PowerLaw','N','NRVals','GoodmanMean','GoodmanAmp'],compiler='gcc')
我是Python和C ++的新手,所以这就是你可能称之为无能的完美风暴!