单括号和双括号Numpy数组的区别是什么?

17

这两个numpy对象有什么不同之处?

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

1
尺寸。 - Ignacio Vazquez-Abrams
看看今天早些时候的类似问题:https://dev59.com/DJvga4cB1Zd3GeqPwBHB - hpaulj
3个回答

33
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的二维数组,而后者则是由四个元素组成的一维数组。


1
(4,)表示什么?4行和未定义的列数?为什么第二个操作的结果不是(,4)? - bkr879
2
shape 属性返回一个标准的 Python tuple,其中的数字表示每个维度的元素数量。因此 (4,) 是一个标准的包含 1 个元素的 Python tuple,该元素的值为 4(,4) 不是一个有效的 tuple。 - Jan Christoph Terasa
1
我不确定,但是 (4,) 不是表示只有 4 行和一个列,也就是一个一维数组吗?(1,4) 的第二个输出意味着 1 行和 4 列,所以输出有 4 列不应该意味着它有四个维度吗? - Simon
后面的(4,)数组没有任何“列”,因为它是一维的。拥有列意味着它是二维的。 - Jan Christoph Terasa

12

单括号和双括号的区别始于列表:

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

4

当您使用两个括号来定义一个数组时,实际上您声明了一个数组,并在其中声明了四个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
对于那些提出这种问题的人来说,我认为这可能是更容易解释的方法:返回仅翻译的文本“true”。 - Avi Mosseri

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接