ValueError: несоответствие типа буфера, ожидалось «плавающее», но получено «двойное»

Я скомпилировал скрипт Cython и запустил его. При запуске я получил ошибку из следующей строки кода:

cdef np.ndarray[float] vola = np.empty(n, dtype=float)

Почему это? Я хочу позже заполнить массив vola значениями с плавающей запятой, поэтому я хочу отформатировать его как float, а не double.


person user3276418    schedule 19.01.2015    source источник


Ответы (1)


Просто используйте cdef np.ndarray[double] vola = np.empty(n, dtype=float).

Пример на ipython с cythonmagic (см. пример здесь):

%%cython
import numpy as np
cimport numpy as np
cpdef foo(n):
    cdef np.ndarray[double] vola = np.empty(n, dtype=float)
    return vola

foo(4)  #output :
array([ 2.14079666e-314, 2.14079666e-314, 2.17357252e-314, 2.78136356e-309])

Это происходит потому, что число с плавающей запятой numpy является числом C double.

РЕДАКТИРОВАТЬ: для более переносимого/управляемого кода вы можете использовать np.float64_t вместо double и указать dtype=np.float64 в вызове empty().

person gg349    schedule 19.01.2015