Numpy使用负数进行reshape

7 浏览
0 Comments

Numpy使用负数进行reshape

这个问题已经有了答案:

numpy中的reshape函数里的-1是什么意思?

我刚刚接触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日
0
0 Comments

ce的区别不仅在于额外的空格,还在于每个组合周围额外加了括号,即

[2 3]    vs    [[2 3]]

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

当您在形状中放置-1时,numpy会根据其他维度进行推断,即将-1替换为指定形状的所有维度的乘积/所有指定形状的维度的乘积

0
0 Comments

在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)的乘积仍与先前的元素数量相匹配。

0