单括号和双括号 Numpy 数组之间的区别?

新手上路,请多包涵

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

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

原文由 Char 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.2k
2 个回答
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 元素的一维数组。

原文由 Jan Christoph Terasa 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

 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,:] produces the (1,3) version, while array(ll1).ravel() produces a (3,) version.

单括号和双括号的最终结果是数组维数的不同,但我们不应该忽视 Python 首先创建不同列表的事实。

原文由 hpaulj 发布,翻译遵循 CC BY-SA 3.0 许可协议

推荐问题