Numpy 用负值重塑

Jim*_*Suh 5 python numpy python-2.7

我对 numpy 真的很陌生,目前对重塑中的负值感到困惑。

将 numpy 导入为 np

a=np.arange(6)
c=a.reshape(1,3,2)
d=a.reshape(-1,3,2)
e=a.reshape(-1,1,2)
print c
print
print d
print
print e
Run Code Online (Sandbox Code Playgroud)

它返回

[[[0 1]
  [2 3]
  [4 5]]]

[[[0 1]
  [2 3]
  [4 5]]]

[[[0 1]]

 [[2 3]]

 [[4 5]]]
Run Code Online (Sandbox Code Playgroud)

这里的问题是,当比较 c 和 d 时,根本没有区别。然而,在 e 中,每行之间形成了额外的空行。那么,-1 在 reshape 函数中究竟做了什么,为什么它会导致 e 中的每一行之间出现空行?谢谢 !

Ima*_*ngo 8

当您添加-1到 numpy 中的轴时,它只会将其他所有内容放入该轴中。a也就是说,对于shape 的数组(10, 10),将应用以下操作:

>>> a.reshape(-1, 10, 10) # a is (1, 10, 10)
>>> a.reshape( 1, 10, 10) # a is also (1, 10, 10)
>>> a.reshape(-1, 5, 5)   # a is (4, 5, 5), since 4 * 5 *  5 = 100
>>> a.reshape(-1, 5, 10)  # a is (2, 5, 10) since 2 * 5 * 10 = 100 
Run Code Online (Sandbox Code Playgroud)

也就是说,在重塑时元素的总数必须相同,因此添加-1到形状中只是让 numpy 为您计算剩余的值,以便轴的乘积仍然与之前的元素数量匹配。


Pie*_*lla 1

c和的区别e不仅在于额外的空间,还在于每对周围的额外支架,即

[2 3]    vs    [[2 3]]
Run Code Online (Sandbox Code Playgroud)

这是因为 的形状c[1, 3, 2],而 的形状e[3, 1, 2]。的形状d也是[1, 3, 2],因此cd相等。

当你在形状中放入 -1 时,numpy 会从其他维度推断它,即将 -1 替换为product of all dimensions of a / product of all specified shapes