这两个numpy对象有什么区别?
import numpy as np
np.array([[0,0,0,0]])
np.array([0,0,0,0])
Run Code Online (Sandbox Code Playgroud)
Jan*_*asa 17
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,)
Run Code Online (Sandbox Code Playgroud)
前者是1 x 4二维数组,后者是4元素一维数组.
单括号和双括号之间的区别从列表开始:
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
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)
这里的列表列表已经变成了一个二维数组.以微妙的方式numpy模糊了列表和嵌套列表之间的区别,因为两个数组之间的差异在于它们的形状,而不是基本结构. array(ll)[None,:]生成(1,3)版本,同时array(ll1).ravel()生成(3,)版本.
在最终结果中,单括号和双括号之间的差异是数组维度数量的差异,但我们不应忽视Python首先创建不同列表的事实.