Вторая половина дня. В настоящее время я переношу код IDL на python, и до сих пор он проплывал до этого момента. Я застрял на этом участке IDL кода:Портирование IDL-кода, функции lindgen для Python
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 и ошибки, возникающие в сценарии питона, я уверен, что он имел в виду, что скаляр. Не хватает ли какой-либо функции этих функций IDL?
Любые мысли были бы весьма благодарны. Cheers.
По определению в pylindgen() ind2 представляет собой массив numpy, поэтому я не думаю, что мне нужно определить его как один снова. –
Пожалуйста, разместите ошибки Python, которые вы видите. В коде IDL 'ind2' - это массив, в котором операция mod была применена по элементам. Код Python, который вы даете для выполнения того же действия, корректен для применения 'mod' к NumPy' ndarray'. Ошибка должна исходить из другой части вашего кода. – ely
См. Jblasco ниже, чтобы узнать об ошибке. Спасибо за ответ! –