单支架和N​​umpy阵列之间的区别?

时间:2016-09-26 03:34:29

标签: python numpy

这两个numpy对象有什么区别?

import numpy as np
np.array([[0,0,0,0]])
np.array([0,0,0,0])

3 个答案:

答案 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],
]