大家下午好。我目前正在将一个IDL代码移植到python上,到目前为止,这一切都是一帆风顺的。我被IDL代码的这一部分困住了:
nsteps = 266
ind2 = ((lindgen(nsteps+1,nsteps+1)) mod (nsteps+1))
dk2 = (k2arr((ind2+1) < nsteps) - k2arr(ind2-1) > 0)) / 2.
我的版本包括重写的lindgen函数,如下所示:
^{pr2}$。。。还有一个移植代码,其中k2arr是一个shape数组(267,):
ind2 = pylindgen((nsteps+1,nsteps+1)) % (nsteps+1)
dk2 = (k2arr[ (ind2+1) < nsteps ] - k2arr[ (ind2-1) > 0. ]) / 2.
现在,问题是我的代码使ind2成为一个数组,通过查看IDL代码和python脚本中抛出的错误,我确信ind2应该是一个标量。我是否缺少这些IDL函数的某些特性?
任何想法都将不胜感激。 干杯。
我对IDL的了解已经不是以前的样子了,我不得不研究一下。IDL中的运算符“>;”不是python(或其他语言)的等价物。它建立了一个最大值,任何高于它的值都将被设置为该值。“<;”也一样,很明显,它设置了一个最小值。在
dk2=(k2arr((ind2+1)<;nsteps)-k2arr(ind2-1)>;0)) 其中k2arr为266,ind2为(266266266),相当于:
最棘手的是现在。k2arr(266,)是针对(ind2+1)和(ind2-1)的每一行计算的,这意味着如果(ind2+1<;nsteps)=[1,2,3,…,nsteps-1,nsteps,nsteps]则k2arr将被精确地计算266次,一个接一个,结果是(266266266)数组。在
现在我记得为什么我停止在IDL中编程了!在
pylindgen的代码对我来说很好用。但是生成一个数组(267267)。如果k2array是一个(267,)数组,那么应该会得到如下错误:
ValueError:布尔索引数组应具有一维
这就是你的问题? 干杯
相关问题 更多 >
编程相关推荐