Cython самый быстрый способ обработки массивовPython

Программы на Python
Ответить
Гость
 Cython самый быстрый способ обработки массивов

Сообщение Гость »


В моем проекте я хотел бы быстро разобраться с целочисленными массивами. В частности, я хочу создавать их и проходить через них как можно быстрее.

Я вижу, что numpy рекомендуется повсюду, поскольку массивы numpy работают как типизированные представления памяти Cython. Это упоминается в документации cython https://cython.readthedocs.io/en/latest ... views.html

%%cython импортировать numpy как np cpdef test_1(int[:] lst): cdef int[100] ret для ii в диапазоне (lst.shape[0]): ret[ii] = lst[ii] вернуть возврат cpdef test_2(int[:] lst): cdef int[:] ret = np.empty(100, dtype=np.dtype("i")) для ii в диапазоне (lst.shape[0]): ret[ii] = lst[ii] вернуть возврат cpdef test_3 (список списка): список cdef ret = [0]*100 для ii в диапазоне(len(lst)): ret[ii] = lst[ii] вернуть возврат Я ожидаю, что типизированный массив будет работать намного быстрее (test_1). Я также ожидаю, что, поскольку numpy рекламируется повсюду (test_2), он будет достаточно быстрым. И возвращение к списку объектов Python с созданием [0]*100 происходит настолько медленно, насколько это возможно. К моему удивлению, выбрав время для трех тестов, я получил следующее:

импортировать numpy как np lst_1 = [1, 2, 3, 4, 5] lst_2 = np.array(dsa, dtype=np.intc) %timeit test_1(lst_2) %timeit test_2(lst_2) %timeit test_3(lst_1) 1,3 мкс ± 60,3 нс на цикл (среднее ± стандартное отклонение для 7 циклов по 1 000 000 циклов каждый) 1,43 мкс ± 18,3 нс на цикл (среднее ± стандартное отклонение для 7 циклов по 1 000 000 циклов каждый) 481 нс ± 13,1 нс на цикл (среднее ± стандартное отклонение для 7 циклов по 1 000 000 циклов каждый) Почему список Python самый быстрый? Что-то я делаю неправильно, когда создаю или получаю доступ к представлениям памяти? Как я могу очень быстро создавать массивы int и получать к ним доступ в cython?
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»