np.array(int) 和 np.array([int]) 有什么区别?

Gil*_*ili 5 python numpy

np.array(100)和 和有什么区别np.array([100])?我知道后者是一个包含单个值 ( 100) 的一维数组,但前者叫什么?

hpa*_*ulj 3

这是一个 0d 数组。它的使用方式与其他数组有许多相同的方式,当然取决于形状和数据类型兼容性。

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
Run Code Online (Sandbox Code Playgroud)

item()和之间有细微的差别[()]。一个返回 python 对象,另一个返回“numpy 标量”。

有关 numpy 标量的更多信息:

https://numpy.org/doc/stable/reference/arrays.scalars.html#methods

我们遇到 0d 数组的常见情况是当对象被包装在数组中时,例如 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'
Run Code Online (Sandbox Code Playgroud)

0d 数组的值可以更改

In [562]: x[...] = 4
In [563]: x
Out[563]: array(4)
Run Code Online (Sandbox Code Playgroud)