python.array против numpy.array

Если вы создаете 1d массив в Python, есть ли какая-то польза от использования пакета NumPy?

Ответы на вопрос(2)

Небольшая начальная загрузка для тех, кто может найти это полезным (после превосходного ответа @dF.):

import numpy as np
from array import array

# Fixed size numpy array
def np_fixed(n):
    q = np.empty(n)
    for i in range(n):
        q[i] = i
    return q

# Resize with np.resize
def np_class_resize(isize, n):
    q = np.empty(isize)
    for i in range(n):
        if i>=q.shape[0]:
            q = np.resize(q, q.shape[0]*2)        
        q[i] = i
    return q    

# Resize with the numpy.array method
def np_method_resize(isize, n):
    q = np.empty(isize)
    for i in range(n):
        if i>=q.shape[0]:
            q.resize(q.shape[0]*2)
        q[i] = i
    return q

# Array.array append
def arr(n):
    q = array('d')
    for i in range(n):
        q.append(i)
    return q

isize = 1000
n = 10000000

Выход дает:

%timeit -r 10 a = np_fixed(n)
%timeit -r 10 a = np_class_resize(isize, n)
%timeit -r 10 a = np_method_resize(isize, n)
%timeit -r 10 a = arr(n)

1 loop, best of 10: 868 ms per loop
1 loop, best of 10: 2.03 s per loop
1 loop, best of 10: 2.02 s per loop
1 loop, best of 10: 1.89 s per loop

Кажется, что array.array немного быстрее, а 'api' избавляет вас от хлопот, но если вам нужно больше, чем просто хранить double, тогда numpy.resize, в конце концов, не является плохим выбором (если используется правильно).

Решение Вопроса

Все зависит от того, что вы планируете делать с массивом. Если все, что вы делаете, - это создание массивов простых типов данных и выполнение операций ввода-вывода,массив модуль подойдет просто отлично.

Если, с другой стороны, вы хотите выполнять какие-либо числовые вычисления, модуль массива не поможет вам в этом.NumPy (а такжеSciPy) предоставляет вам широкий спектр операций между массивами и специальными функциями, которые полезны не только для научной работы, но и для таких вещей, как расширенные манипуляции с изображениями или вообще все, что вам необходимо для выполнения эффективных вычислений с большими объемами данных.

Numpy также гораздо более гибок, например, он поддерживает массивы объектов Python любого типа, а также способен взаимодействовать «изначально» с вашими собственными объектами, если они соответствуютинтерфейс массива.

 06 мар. 2018 г., 19:37
@ Карло должно быть исправлено сейчас.
 05 мар. 2018 г., 15:35
@dF. Ссылка на модуль массива не работает. Вы знаете его новое местоположение?
 01 янв. 2018 г., 01:02
@ J.J никогда в жизни не использовал array.array, не могли бы вы привести пример использования, когда он значительно лучше (возможно, я злоупотребляю np.ndarray)?
 01 нояб. 2015 г., 12:59
Что касается массива array.array, я думаю, что важно отметить, что он также намного легче, чем numpy.array, и что поговорка «хорошо подойдет». для одномерного массива действительно должно быть «намного быстрее, меньше и работать в pypy / cython без проблем». Я люблю NumPy, но для простых массивов модуль array.array на самом деле лучше.

Ваш ответ на вопрос