Я все еще в начале, чтобы понять, как работает Cython. Этот фрагмент показывает одну из медленных частей моей программы, и мне интересно, можно ли улучшить это для цикла. Он по-прежнему выглядит как оригинальная версия Numpy, но я добавил cdef и int-conversion.Ускорение цикла в Cython
cdef Py_ssize_t i, j
cdef double ii, jj
for ii in np.arange(startx, endx+1, 0.1):
for jj in np.arange(starty, endy+1, 0.1):
if my_condition(ii, jj):
i = <int>ii
j = <int>jj
data[i, j] += 1
Есть ли у вас рекомендации?
Не похоже, чтобы вы когда-либо меняли 'ii' или' jj', и вы полностью игнорируете значения 'i' и' j' из циклов 'for'. Кроме того, использование 'np.arange' с шагом с плавающей точкой - ужасная идея, используете ли вы Cython или нет. Я бы рекомендовал 'np.linspace', но я не думаю, что Cython знает, как его оптимизировать. – user2357112
Литье также является дорогостоящим в целом и также должно быть перемещено из петель, если это возможно. –
В целом, этот код просто не имеет никакого смысла. – user2357112