What's the difference between np.array(100)
and np.array([100])
? I understand that the latter is a 1D array containing a single value (100
) but what is the former called?
CodePudding user response:
A Tuple like np.array(100) is an ordered and an immutable data type which means we cannot change its values and tuples are written in round brackets. We can access tuple by referring to the index number inside the square brackets.
An Array like np.array([100]) is a collection of items stored at contiguous memory locations. The idea is to store multiple items of the same type together. This makes it easier to calculate the position of each element by simply adding an offset to a base value.
CodePudding user response:
This is a 0d array. It can be used in many of the same ways as other arrays, subject of course to shape and dtype compatibilites.
In [545]: x=np.array(3)
In [546]: x.shape
Out[546]: () # empty tuple
In [547]: x.ndim
Out[547]: 0
In [548]: x.ravel()
Out[548]: array([3]) # as with other arrays, ravel makes a 1d array
In [549]: x.reshape(1,1,1) # reshape to 3d
Out[549]: array([[[3]]])
In [550]: x.item() # extracting that element
Out[550]: 3
In [551]: x[()] # another extracting
Out[551]: 3
In [552]: type(_)
Out[552]: numpy.int64
In [553]: type(x.item())
Out[553]: int
There's a subtle difference between item()
and [()]
. One returns python object, the other a "numpy scalar".
More on numpy scalars:
https://numpy.org/doc/stable/reference/arrays.scalars.html#methods
A common case where we encounter 0d array is when an object gets wrapped in an array, such as via np.save
.
In [556]: d = np.array({'foo':'bar'})
In [557]: d
Out[557]: array({'foo': 'bar'}, dtype=object)
In [558]: d.shape
Out[558]: ()
In [559]: d.item()['foo']
Out[559]: 'bar'
The value of a 0d array can be changed
In [562]: x[...] = 4
In [563]: x
Out[563]: array(4)