我的python脚本以一种我无法理解的方式运行。这是一个相当复杂的脚本,为了简单起见,我在这里将其最小化,希望在这里保留所有重要的特性
解决问题的方法:我尝试用一组公共参数来模拟几个实验曲线。首先,根据输入参数计算出两个函数SLD1和SLD2,用来确定实验曲线
Phi1, Phi2, SLD1, SLD2 = nr.Par(fit_params, Files, GFP, coher)
SLD1和SLD2的尺寸相同,但值不同。如上所述,我从SLD1和SLD2计算实验曲线,并将它们存储在数组的第5列(datax和datay)
for i in range(len(Files)):
qexp, RRexp, RRerr, qres = np.loadtxt(Files[i], unpack=True, skiprows=24, usecols=(0,1,2,3))
dataset = np.zeros(shape=(len(qexp),5))
dataset[:,0:4] = np.column_stack((qexp*10, RRexp, RRerr, qres*10))
data.append(dataset)
Phi1, Phi2, SLD1, SLD2 = nr.Par(fit_params, Files, GFP, coher)
datax = np.copy(data, order='K')
datay = np.copy(data, order='K')
for i in range(len(Files)):
q = data[i][:,0]
datax[i][:,4] = np.copy(nr.NRcalc(q, SLD1[:,i,:],GFP))
datay[i][:,4] = np.copy(nr.NRcalc(q, SLD2[:,i,:],GFP))
print(SLD2[:,1,:]- SLD1[:,1,:])
print(nr.NRcalc(data[1][:,0], SLD1[:,1,:], GFP)-nr.NRcalc(data[1][:,0], SLD2[:,1,:],GFP))
print(datax[1][:,4]-datay[1][:,4])
在我的程序概念中,用SLD1计算的实验曲线应该存储在datax[i][:,4]中,用SLD2计算的实验曲线应该存储在datay[i][:,4]中。但是,这两列是相同的!事实上
print(datax[1][:,4]-datay[1][:,4])
返回一个零数组。实际上,在计算数据y[i][:,4]时,我也在覆盖数据x[i][:,4]。我不明白的是为什么
print(nr.NRcalc(data[1][:,0], SLD1[:,1,:], GFP)-nr.NRcalc(data[1][:,0], SLD2[:,1,:],GFP))
返回正确的值。我可能插入了太多的np.copy命令,希望解决这个问题,这似乎是一个不必要的数组链接。然而,这并没有改变任何输出。为了完整起见,我还发布了Nr.Calc函数:
def NRcalc(q,SLDt,GFP):
start = timeit.default_timer()
RR = np.ndarray(shape=(len(q)))
x = SLDt[:,0]
for j in range(len(q)):
k0 = np.complex256(q[j]/2.+np.sqrt(4*np.pi*GFP[6]+0j))
k = np.complex256(np.sqrt(k0**2-4*np.pi*SLDt[:,1]+0j))
rij = np.zeros(shape=(len(x),1),dtype=np.complex_)
Rij = np.zeros(shape=(len(x),1),dtype=np.complex_)
for i in range(len(x)):
if (i == len(x)-1):
rij[i] = (k0-k[i])/(k[i]+k0)
elif (i < len(x)-1):
rij[i] = (k[i+1]-k[i])/(k[i]+k[i+1])
Rij[0] = rij[0]
if (i>0):
pp = np.exp(-2j*k[i-1]*(x[i]-x[i-1])) #Phase shift of reflected wave
Rij[i] = ((rij[i] + Rij[i-1]*pp)/(1+rij[i]*Rij[i-1]*pp))
Ref=(Rij[len(x)-1])*np.conj(Rij[len(x)-1])
RR[j]=Ref.real
stop = timeit.default_timer()
print("Time taken to calculate RR", stop-start)
return RR+GFP[9]
我错过了什么?感谢您的帮助和建议
目前没有回答
相关问题 更多 >
编程相关推荐