Numpy使用负数进行reshape
Numpy使用负数进行reshape
这个问题已经有了答案:
我刚刚接触numpy,目前对reshape函数中的负数参数感到困惑。
import numpy as 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
上面的代码返回结果为:
[[[0 1] [2 3] [4 5]]] [[[0 1] [2 3] [4 5]]] [[[0 1]] [[2 3]] [[4 5]]]
我想问的问题是,当比较c和d的时候,它们完全没有区别。然而,e中生成了额外的空行以分隔每行的元素。那么,在reshape函数中-1具体有什么作用,它为什么会在e中导致每行之间出现空行?谢谢!
admin 更改状态以发布 2023年5月23日
在numpy中,当你给一个axis(轴)加上-1
时,它只会将该axis中的其他元素放在一起。对于一个形状为(10,10)
的数组a
,将执行以下操作:
>>> 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
也就是说,在重塑(reshape)时,元素的总数必须保持不变,因此将-1
添加到形状中只是让numpy为您计算剩余值,以便轴(axes)的乘积仍与先前的元素数量相匹配。