Cython: должен ли я использовать np.float_t вместо double для типизированных представлений памяти

Что касается представлений памяти в cython, есть ли какое-либо преимущество при вводе представления с типами NumPy, такими как np.float_t, вместо простого выполнения double, если я работаю с массивами с плавающей запятой numpy?

И должен ли я набирать cdef таким же образом, делая e. грамм.

ctypedef np.float64_t np_float_t
...

@cython.profile(False)
@cython.wraparound(False)
@cython.boundscheck(False)
cdef np_float_t mean_1d(np_float_t [:] v) nogil:
    cdef unsigned int n = v.shape[0]
    cdef np_float_t n_sum = 0.

    cdef Py_ssize_t i
    for i in range(n):
        n_sum += v[i]

    return n_sum / n

person embert    schedule 07.01.2014    source источник


Ответы (1)


Если вы посмотрите в файл заголовка numpy, включенный в cython (например, в основной ветке, это __init__.pxd), вы найдете

    ctypedef double       npy_double

а также

ctypedef npy_double     float_t

Другими словами, float_t равно double, поэтому не должно быть никаких преимуществ в использовании np.float_t.

person Warren Weckesser    schedule 07.01.2014
comment
Я нашел это .. строка 311/758 :| и так как мы об использовании типов: (Почему / Когда) Предпочтительно ли использовать Py_ssize_t для индексации? (В документах я только что нашел «# Пуристы могут использовать Py_ssize_t, который является правильным типом Python для индексов массива».) -> означает ли это всегда при индексации NumPy/Cython-Array(s)/-views что угодно..? - person embert; 08.01.2014
comment
Вместо комментария вы должны начать новый вопрос об использовании Py_ssize_t. Это обеспечит максимальную экспозицию. - person Warren Weckesser; 08.01.2014
comment
Ты прав. Легче также найти для других искателей ответов. Больше всего я сомневаюсь, стоит ли делать из этого самостоятельный вопрос. Тем не менее, я постараюсь сделать это с этого момента - person embert; 08.01.2014
comment
Я сделал Py_ssize_t штукой новый вопрос - person embert; 08.01.2014
comment
ХОРОШО. Я как раз был о комментарии здесь, что ответ да, но трудно найти окончательное утверждение этого. - person Warren Weckesser; 08.01.2014