Numpy中括号和方括号有什么区别?

时间:2018-10-18 11:50:51

标签: python python-3.x numpy

有人可以解释一下Numpy中()和[]运算之间的区别吗?

例如,我运行了以下代码:

import numpy as np

x1 = np.array(([2, 9], [1, 5], [3, 6]), dtype=float)
print(x1)
print(type(x1))
x2 = np.array([[2, 9], [1, 5], [3, 6]], dtype=float)
print(x2)
print(type(x2))

y1 = np.array(([2, 9]), dtype=float)
print(y1)
print(type(y1))

y2 = np.array([[2, 9]], dtype=float)
print(y2)
print(type(y2))

x1和x2都具有相同的数据和类型,但是y1和y2不同。 我认为y1和y2应该相同。有人可以解释y1和y2不同的原因吗?

4 个答案:

答案 0 :(得分:1)

数组y1y2具有不同的形状。第一个是一维的,第二个是二维的。 [2, 9]周围的括号没有任何意义(因为其中只有一个元素和逗号)。参见下面以及第一条评论。

y1 = np.array(([2, 9]), dtype=float)
y1.shape  # (2,)
y2 = np.array([[2, 9]], dtype=float)
y2.shape  # (1, 2)

有关括号的内容

a = (3)
type(a)  # int
b = (3, )
type(b)  # tuple
c = (3, 4)
type(c)  # tuple

答案 1 :(得分:1)

这实际上与Numpy无关。

此:

([2, 9], [1, 5], [3, 6])

是3个列表的元组。

此:

[[2, 9], [1, 5], [3, 6]]

是3个列表的列表。

由于元组和列表都是有序序列,因此numpy对待它们相同。

现在,这个:

([2, 9])

实际上是两个整数的列表-表达式仅强制执行求值的顺序-因此numpy获得的实际上是

[2, 9] 

与此同时:

[[2, 9]]

是一个列表的列表(两个整数)。因此,当然numpy不会对它们进行相同的处理,因为它们确实不同。

这里的要点是构成元组的不是括号,而是昏迷,所以第一个例子:

([2, 9], [1, 5], [3, 6])

是真的:

[2, 9], [1, 5], [3, 6]

TL; DR:

对于第三个示例,您需要:

([2, 9],)

不是

([2, 9])

答案 2 :(得分:1)

那个额外的括号没有任何改变。实际上是[2,9]

还有另一个示例可以查看:

np.random.randn((((((((((((((((((((((1))))))))))))))))))))))

有效:

np.random.randn(1)

这不是Numpy的专长。只要包含单个表达式,几乎可以在任何地方添加括号。

相反,如果Python在括号或空括号内找到任何逗号分隔的值,则它将尝试转换为元组对象。

答案 3 :(得分:0)

据我了解,在np.array中输入元组也称为列表,例如

  

a = np.zeros((3,3))

     

array([[0。,0.,0.],          [0.,0.,0.],          [0.,0.,0。]])

就像我们在np.array中输入一个列表以进行零的初始化

  

a = np.zeros([3,3])

     

array([[0。,0.,0.],          [0.,0.,0.],          [0.,0.,0。]])

但是,如果您在简单的python中使用相同的模式进行初始化,则会将它们分别计为元组和列表。

  

a =([[2,6],[4,5])

     

([[2,6],[4,5])

     

“元组”类

     

b = [[2,6],[4,5]]

     

类型(b)

类“列表”