Как сделать пустые массивы numpy типа int
в Cython? Следующие работы для меня для двойных или поплавковых массивов:Как инициализировать массивы numpy с фиксированными размерами в Cython?
# make array of size N of type float
cdef np.ndarray[float, ndim=1] myarr = np.empty(N)
# make array of size N of type int
cdef np.ndarray[int, ndim=1] myarr = np.empty(N)
Однако, если я пытаюсь сделать то же самое с междунар, он не:
# this fails
cdef np.ndarray[np.int, ndim=1] myarr = np.empty(N)
# wanted to set first element to be an int
myarr[0] = 5
дает ошибку:
ValueError : Несоответствие типа буфера, ожидаемое 'int', но получившее 'double'
Поскольку, видимо, np.empty()
возвращает двойной. Я пробовал:
cdef np.ndarray[np.int, ndim=1] myarr = np.empty(N, dtype=int)
, но он дает ту же ошибку. Как это может быть сделано?
Почему это не работает с простым 'int' или просто' np.int' в отличие от 'np.int32_t'? – user248237dfsf
Аргумент типа объявления ndarray должен быть C-типом, а не типом объекта Python. Если вы выкопаете в файл заголовка numpy cython 'numpy.pxd', вы обнаружите, что' np.int32_t' в конечном итоге приводит к объявлению 'signed int'. –
Не могли бы вы объяснить, почему вы используете 'dtype = np.int', а не' dtype = np.int32_t' при вызове 'np.empty'? последний не работает – user248237dfsf