这两个numpy对象有什么不同之处?
import numpy as np
np.array([[0,0,0,0]])
np.array([0,0,0,0])
In [71]: np.array([[0,0,0,0]]).shape
Out[71]: (1, 4)
In [72]: np.array([0,0,0,0]).shape
Out[72]: (4,)
前者是一个1x4的二维数组,而后者则是由四个元素组成的一维数组。
shape
属性返回一个标准的 Python tuple
,其中的数字表示每个维度的元素数量。因此 (4,)
是一个标准的包含 1 个元素的 Python tuple
,该元素的值为 4
。(,4)
不是一个有效的 tuple。 - Jan Christoph Terasa(4,)
数组没有任何“列”,因为它是一维的。拥有列意味着它是二维的。 - Jan Christoph Terasa单括号和双括号的区别始于列表:
In [91]: ll=[0,1,2]
In [92]: ll1=[[0,1,2]]
In [93]: len(ll)
Out[93]: 3
In [94]: len(ll1)
Out[94]: 1
In [95]: len(ll1[0])
Out[95]: 3
ll
是一个包含3个项目的列表。ll1
是一个包含1个项目的列表;该项目是另一个列表。记住,列表可以包含各种不同的对象,例如数字、字符串、其他列表等。
您的两个表达式有效地从这两个列表中创建了数组。
In [96]: np.array(ll)
Out[96]: array([0, 1, 2])
In [97]: _.shape
Out[97]: (3,)
In [98]: np.array(ll1)
Out[98]: array([[0, 1, 2]])
In [99]: _.shape
Out[99]: (1, 3)
这里的列表列表被转换为二维数组。在微妙的方式下,numpy
模糊了列表和嵌套列表之间的区别,因为两个数组之间的区别在于它们的形状,而不是基本结构。array(ll)[None,:]
产生 (1,3)
版本,而 array(ll1).ravel()
产生 (3,)
版本。
最终结果中单括号和双括号之间的差异在于数组维度的数量不同,但我们不应该忽视 Python 首先创建不同列表的事实。
ll1
它仍然只是一个包含1个项目的列表(但该项目是由3个项目组成的列表)。 - TheMaster当您使用两个括号来定义一个数组时,实际上您声明了一个数组,并在其中声明了四个0的数组。 因此,如果您要访问第一个零,则将访问 your_array [0] [0]
,而在第二个数组中,您只需访问 your_array [0]
。也许更好的方法是这样来想:
array: [
[0,0,0,0],
]
vs
array: [0,0,0,0]
np.array
时,最好使用x[0, 0]
进行索引。numpy
数组具有比嵌套列表更强大的索引方法。 - hpaulj