【发布时间】:2013-11-08 03:46:54
【问题描述】:
大家下午。我目前正在将 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 函数,如下所示:
def pylindgen(shape):
nelem = numpy.prod(numpy.array(shape))
out = numpy.arange(nelem,dtype=int)
return numpy.reshape(out,shape)
...以及移植代码,其中 k2arr 是一个形状为 (267,) 的数组:
ind2 = pylindgen((nsteps+1,nsteps+1)) % (nsteps+1)
dk2 = (k2arr[ (ind2+1) < nsteps ] - k2arr[ (ind2-1) > 0. ]) / 2.
现在,问题是我的代码使 ind2 成为一个数组,通过查看 IDL 代码和 Python 脚本中抛出的错误,我确定它是一个标量。我是否缺少这些 IDL 函数的某些功能?
任何想法将不胜感激。 干杯。
【问题讨论】:
-
根据 pylindgen() 中的定义,ind2 是一个 numpy 数组,所以我觉得不需要再定义一个了。
-
请发布您看到的 Python 错误。在 IDL 代码中,
ind2是一个数组,其中已按元素应用了 mod 操作。您为执行相同操作而提供的 Python 代码对于将mod应用于 NumPyndarray是正确的。错误必须来自代码的不同部分。 -
请参阅下面的 Jblasco 了解错误。感谢您的回复!
标签: python arrays numpy idl-programming-language