2
Пусть a
и b
два numpy.float
массивы длиной 1024, определенные сЦикл по массиву Numpy с Cython
cdef numpy.ndarray a
cdef numpy.ndarray b
Я заметил, что:
cdef int i
for i in range(1024):
b[i] += a[i]
значительно медленнее, чем:
b += a
Почему?
Мне действительно нужно уметь вручную обходить массивы.
Вы читаете и следуете за http://docs.cython.org/src/tutorial/numpy.html? Я имею в виду, я сомневаюсь, что вы будете бить b + = a с точки зрения скорости, но какие скорости вы на самом деле получаете? – ballsatballsdotballs
Последний по-прежнему использует собственные петли ufunc от Numpy, которые могут включать в себя ряд улучшений в зависимости от того, как был скомпилирован ваш Numpy. Первое не имеет, и еще больше пострадает от медленной индексации объектов ndarray; ссылка @ballsdotballs обсуждает это и как ее исправить. – Iguananaut
Только побочный комментарий: 'cdef float x' 32-битный или 64-битный поплавок? Какой тип cdef будет работать с numpy.float32, numpy.float64? Я посмотрел на документ, но не нашел точного соответствия. – Basj