У меня возникли проблемы с передачей в этой памяти целых чисел в эту (довольно тривиальную) функцию. Python дает мне эту ошибку:Cython: несоответствие типа буфера, ожидаемое 'int', но получившее 'long'
ValueError: Buffer dtype mismatch, expected 'int' but got 'long'
Может кто-нибудь помочь мне понять, что происходит? Поиск в stackoverflow, кажется, имеет отношение к тому, как python интерпретирует типы и как C интерпретирует типы.
%%cython
def myfunction(int [:] y):
pass
# Python code
import numpy as np
y = np.array([0, 0, 1, 1])
myfunction(y)
Это производит ValueError
сверху.
EDIT: Вот некоторые другие вещи, которые я обнаружил.
Для уточнения, эта ошибка будет повторяться, если я объявляю y
следующими способами:
y = np.array([0, 0, 1, 1], dtype='int')
y = np.array([0, 0, 1, 1], dtype=np.int)
y = np.array([0, 0, 1, 1], dtype=np.int64)
Однако, это работает, если я объявляю y
с
y = np.array([0, 0, 1, 1], dtype=np.int32)
ли кто-то хочет дать предложение, почему это это так? Будет ли метать в np.int32
работы на разных компьютерах? (Я использую macbook pro retina, 2013.)
Спасибо за понимание. Будет ли метать в 'np.int64_t' работу на каждом компьютере? (Я знаю, что я спросил, будет ли метать в dtype = np.int32' на всех компьютерах, но этот параметр был в коде python. Мне интересно, работает ли опция np.int64_t', приведенная выше, на всех компьютерах , учитывая, что это код cython.) – hlin117
Думаю, что да. Поскольку он находится в объявлении функции, пока мы передаем массив 'np.int64', он будет работать нормально. Как внутренне 'np.int64_t' будет переведен в 'C', это проблема' numpy', а не наша проблема (и я бы поверила, что об этом уже позаботились: P). Извините, это не окончательный ответ, но я часто видел это использование в учебниках и кодексах других народов. –
Я считаю, что синтаксис memoryview теперь предпочитает объявлять его как массив numpy (он работает в более общем плане и на той же скорости). Тем не менее, вопрос о 'np.int64' прав. – DavidW