1

我正在尝试使用 SciPy Weave 来加速我从 MatLab 翻译的 Python 代码中的循环密集型任务。在 MatLab 中,我竭尽全力对其进行矢量化,使其运行得非常快。我已经在 Python 中用循环尝试过它,而且速度慢得令人无法接受,所以虽然我可能可以用 NumPy 做我在 MatLab 中所做的事情并让它运行得一样快,但我想学习使用 Wea​​ve,因为它在未来。我在这里检查了我的 C++ 工作:http: //ideone.com/E8ACaq(第一条评论上方的变量是我传递给 weave 的变量)并且我有更简单的例子在 weave 中工作,但我无法得到在编织中打球的实际代码!

我需要知道的是我的变量需要采用什么格式才能使它们进出。理想情况下,我想要一个 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++ 的新手,所以这就是你所说的完美无能风暴!

4

0 回答 0