Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why the second dimension in a Numpy array is empty?

Why the output here

array = np.arange(3)
array.shape

is

(3,)

and not

(1,3)

What does the missing dimension means or equals?

like image 937
Thomas Lee Avatar asked Jul 14 '18 00:07

Thomas Lee


People also ask

Why does NumPy empty have values?

NumPy empty produces arrays with arbitrary values empty function actually does fill the array with values. It's just that the values are completely arbitrary. The values are not quite “random” like the numbers you get from the np.

What is a 2 dimensional NumPy array?

2D array are also called as Matrices which can be represented as collection of rows and columns. In this article, we have explored 2D array in Numpy in Python. Numpy is a library in Python adding support for large multidimensional arrays and matrices along with high level mathematical functions to operate these arrays.

Can NumPy arrays have more than 2 dimensions?

numpy arrays can have 0, 1, 2 or more dimensions. C. shape returns a tuple of the dimensions; it may be of 0 length, () , 1 value, (81,) , or 2 (81,1) .

How do you create a two-dimensional empty NumPy array?

Create an empty 2D Numpy array using numpy.empty() To create an empty 2D Numpy array we can pass the shape of the 2D array ( i.e. row & column count) as a tuple to the empty() function.


1 Answers

In case there's confusion, (3,) doesn't mean there's a missing dimension. The comma is part of the standard Python notation for a single element tuple. Shapes (1,3), (3,), and (3,1) are distinct,

While they can contain the same 3 elements, their use in calculations (broadcasting) is different, their print format is different, and their list equivalent is different:

In [21]: np.array([1,2,3])
Out[21]: array([1, 2, 3])
In [22]: np.array([1,2,3]).tolist()
Out[22]: [1, 2, 3]
In [23]: np.array([1,2,3]).reshape(1,3).tolist()
Out[23]: [[1, 2, 3]]
In [24]: np.array([1,2,3]).reshape(3,1).tolist()
Out[24]: [[1], [2], [3]]

And we don't have to stop at adding just one singleton dimension:

In [25]: np.array([1,2,3]).reshape(1,3,1).tolist()
Out[25]: [[[1], [2], [3]]]
In [26]: np.array([1,2,3]).reshape(1,3,1,1).tolist()
Out[26]: [[[[1]], [[2]], [[3]]]]

In numpy an array can have 0, 1, 2 or more dimensions. 1 dimension is just as logical as 2.

In MATLAB a matrix always has 2 dim (or more), but it doesn't have to be that way. Strictly speaking MATLAB doesn't even have scalars. An array with shape (3,) is missing a dimension only if MATLAB is taken as the standard.

numpy is built on Python which as scalars, and lists (which can nest). How many dimensions does a Python list have?

If you want to get into history, MATLAB was developed as a front end to a set of Fortran linear algebra routines. Given the problems those routines solved the concept of matrix with 2 dimensions, and row vs column vectors made sense. It wasn't until version 3.something that MATLAB was generalized to allow more than 2 dimensions (in the late 1990s).

numpy is based on several attempts to provide arrays to Python (e.g. numeric). Those developers took a more general approach to arrays, one where 2d was an artificial constraint. That has precedence in computer languages and mathematics (and physics). APL was developed in the 1960s, first as a mathematical notation, and then as a computer language. Like numpy its arrays can be 0d or higher. (Since I used APL before I used MATLAB, the numpy approach feels quite natural.)


In APL there aren't separate lists or tuples. So the shape of an array, rho A is itself an array, and rho rho A is the number of dimensions of A, also called the rank.

http://docs.dyalog.com/14.0/Dyalog%20APL%20Idioms.pdf

like image 177
hpaulj Avatar answered Sep 22 '22 17:09

hpaulj