In [191]: import numpy as np; from array import array
In [192]: import sys
An array.array is memory efficient compared to a list, but essentially the same as numpy array.
In [193]: alist = list(range(10000))
In [194]: anArray = array('i', alist)
In [195]: sys.getsizeof(anArray)
Out[195]: 40080
In [196]: ndArray = np.array(alist)
In [197]: sys.getsizeof(ndArray)
Out[197]: 40112
In [198]: len(alist), len(anArray), len(ndArray)
Out[198]: (10000, 10000, 10000)
list stores references to objects that are stored elsewhere in memory. Those objects may 'primitives' like int, but may also be other lists, etc.
sys.getsizeof gives essentially the same size for array and ndarray, give or take a bit for size overhead. sys.getsizeof is not useful when applied to a list.
To do math a alist values we have to use a list comprehension.
In [200]: timeit [i**2 for i in alist]
5.74 ms ± 18.1 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
Same for an array.array:
In [201]: timeit [i**2 for i in anArray]
6 ms ± 14.5 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
We can use a list comprehension on ndArray, but using it's own math method is much faster:
In [202]: timeit [i**2 for i in ndArray]
2.33 ms ± 21.9 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
In [203]: timeit ndArray**2
14.6 µs ± 36.8 ns per loop (mean ± std. dev. of 7 runs, 100,000 loops each)
I'm a little surprised that the list comprehension on ndarray is faster; usually iteration like this on a ndarray is slower.
'math' on a list is a join or replication. Same for array.array.
In [205]: len(alist+alist)
Out[205]: 20000
In [206]: len(anArray+anArray)
Out[206]: 20000
In [207]: len(anArray*2)
Out[207]: 20000
[python] "import array"only yields 36 results. It is not used, or asked about, very often, especially compared to[numpy]. There are other packages likepandasthat are built onnumpy.[python] "import numpy"also only yields 2,033 results, while searching[numpy]yields 114,117.arraymodule provides. If you want fast numerical calculations, linear algebra, and other scientific computing capabilities, using n-dimensional arrays then you want numpy.