这两个numpy对象有什么区别?
import numpy as np
np.array([[0,0,0,0]])
np.array([0,0,0,0])
答案 0 :(得分:15)
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,)
前者是一个1 x 4的二维数组,后者是一个4元素的一维数组。
答案 1 :(得分:5)
单括号和双括号之间的区别以列表开头:
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个项目的列表;该项目是另一个列表。请记住,列表可以包含各种不同的对象,数字,字符串,其他列表等。
你的2个表达式有效地从两个这样的列表中生成数组
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首先创建不同列表的事实。
答案 2 :(得分:4)
当你定义一个带有两个括号的数组时,你真正在做的是声明一个数组,里面有一个4 0' s。因此,如果您想访问您将要访问的第一个零
Field
在第二个数组中,您只需访问your_array[0][0]
。也许更好的可视化方法是
your array[0]
vs
array: [
[0,0,0,0],
]