Numpy arrays vs Python arrays

numpy array vs list
python array vs list
difference between series and array in python
numpy array append
numpy vs pandas
create numpy array
1d array in python
numpy tutorial

I noticed that the de facto standard for array manipulation in Python is through the excellent numpy library. However, I know that the Python Standard Library has an array module, which seems to me to have a similar use-case as Numpy.

Is there any actual real-world example where array is desirable over numpy or just plain list?

From my naive interpretation, array is just memory-efficient container for homogeneous data, but offers no means of improving computational efficiency.


EDIT

Just out of curiosity, I searched through Github and import array for Python hits 186'721 counts, while import numpy hits 8'062'678 counts.

However, I could not find a popular repository using array.

To understand the differences between numpy and array, I ran a few more quantitative test.

What I have found is that, for my system (Ubuntu 18.04, Python3), array seems to be twice as fast at generating a large array from the range generator compared to numpy (although numpy's dedicated np.arange() seems to be much faster -- actually too fast, and perhaps it is caching something during tests), but twice as slow than using list.

However, quite surprisingly, array objects seems to be larger than the numpy counterparts. Instead, the list objects are roughly 8-13% larger than array objects (this will vary with the size of the individual items, obviously). Compared to list, array offers a way to control the size of the number objects.

So, perhaps, the only sensible use case for array is actually when numpy is not available.

For completeness, here is the code that I used for the tests:

import numpy as np
import array
import sys

num = int(1e6)
num_i = 100
x = np.logspace(1, int(np.log10(num)), num_i).astype(int)

%timeit list(range(num))
# 10 loops, best of 3: 32.8 ms per loop

%timeit array.array('l', range(num))
# 10 loops, best of 3: 86.3 ms per loop

%timeit np.array(range(num), dtype=np.int64)
# 10 loops, best of 3: 180 ms per loop

%timeit np.arange(num, dtype=np.int64)
# 1000 loops, best of 3: 809 µs per loop


y_list = np.array([sys.getsizeof(list(range(x_i))) for x_i in x])
y_array = np.array([sys.getsizeof(array.array('l', range(x_i))) for x_i in x])
y_np = np.array([sys.getsizeof(np.array(range(x_i), dtype=np.int64)) for x_i in x])

import matplotlib.pyplot as plt

plt.figure(figsize=(12, 6))
plt.plot(x, y_list, label='list')
plt.plot(x, y_array, label='array')
plt.plot(x, y_np, label='numpy')
plt.legend()
plt.show()

python.array versus numpy.array, Some important points about Numpy arrays: We can create a n dimensional array in python using numpy.array(). Array are by default Homogeneous, which means​  To understand the differences between numpy and array, I ran a few more quantitative test.. What I have found is that, for my system (Ubuntu 18.04, Python3), array seems to be twice as fast at generating a large array from the range generator compared to numpy (although numpy's dedicated np.arange() seems to be much faster -- actually too fast, and perhaps it is caching something during tests

Yes, if you don't want another dependency in your code.

Python Lists VS Numpy Arrays, Numpy is an open source Python library used for scientific computing and provides a host of features that allow a Python programmer to work with  A numpy array is a grid of values, all of the same type, and is indexed by a tuple of nonnegative integers. The number of dimensions is the rank of the array; the shape of an array is a tuple of integers giving the size of the array along each dimension. The Python core library provided Lists. A list is the Python equivalent of an array, but is resizeable and can contain elements of different types.

Do you mean a real world example in 2018 or 2002? NumPy started as an extension to Python, not as part of the core library. So that's why it is the way it is, not because of any performance tradeoffs.

https://scipy.github.io/old-wiki/pages/History_of_SciPy.html

You seem to be asking a specific version of a more general question. Perhaps if you thought about it more generally, you'd see that your question might not be very useful. Specific modules exist to offer features not available in the core language. There is no surprise if they are more optimized, have more features, or even if they are used more.

It doesn't mean you have to use them, nor is it (much) of a problem to leave them in.

I guess I don't understand why you're asking this question, it would help us try to provide you a better answer.

pandas and NumPy arrays explained - Eric van Rees, NumPy is meant for creating homogeneous n-dimensional arrays (n = 1..n). Unlike Python lists, all elements of a NumPy array should be of  How NumPy Arrays are better than Python List - Comparison with examples OCTOBER 4, 2017 by MOHITOMG3050 In the last tutorial , we got introduced to NumPy package in Python which is used for working on Scientific computing problems and that NumPy is the best when it comes to delivering the best high-performance multidimensional array objects and

A hitchhiker guide to python NumPy Arrays, When we concatenate 2 Numpy arrays, one new resulting array is initialized. So the concatenating operation is relatively faster in python list. All have highlighted almost all major differences between numpy array and python list, I will just brief them out here: Numpy arrays have a fixed size at creation, unlike python lists (which can grow dynamically). The elements in a Numpy array are all required to be of the same data type Numpy

How Fast Numpy Really is and Why?, Python Arrays vs. NumPy Arrays. • Python does not have a built-in array data type​. • Python does have a module called ARRAY that has objects called arrays. You can put unbounded Python integers to numpy array: a = np.array([0], dtype=object) a[0] += 1232234234234324353453453 Arithmetic operations compared to fixed-sized C integers would be slower in this case.

[PDF] Numpy Arrays, This section will present several examples of using NumPy array manipulation to access data and subarrays, and to split, reshape, and join the arrays. While the  Data manipulation in Python is nearly synonymous with NumPy array manipulation: even newer tools like Pandas (Chapter 3) are built around the NumPy array. This section will present several examples of using NumPy array manipulation to access data and subarrays, and to split, reshape, and join the arrays.

Comments
  • "From my naive interpretation, array is just memory-efficient container for homogeneous data, but offers no means of improving computational efficiency." That's basically all their is to it. If you want an efficient way to store a one-dimensional homogenous array you can use array, but that's about all it's good for (sometimes I have found it useful for this though). Numpy provides more powerful N-dimensional arrays and vectorized arithmetic operations and linear algebra, etc.
  • OK, but is it used in some actual application? Like, I do not know, data serialization to disk, or something.
  • I have used it before as a quick way to read/write an array of ints to disk, for example, yes.
  • Can you make a real-world example where you could avoid numpy dependency without sacrificing functionality?
  • I understand it may be there for historical reasons. I was just reviewing all the modules from the standard library and checking what are they good for in 2018 and whether is worth knowing them or not. My understanding is that the Standard Library should not contain libraries that are not useful.
  • Why do they have to be useful for anything other than backwards compatibility? But if your question is "whether it's worth knowing", then I'd say for array, your answer is probably 'no'. But if you're suggestion is "it should be removed", then I'd disagree and say there's not much harm in leaving it (until there's some difficult change that causes it to be a headache to be updated)