有人可以解释一下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不同的原因吗?
答案 0 :(得分:1)
数组y1
和y2
具有不同的形状。第一个是一维的,第二个是二维的。 [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)
类“列表”