Python 为什么numpy.resize不';t与'-1';比如numpy.重塑?

Python 为什么numpy.resize不';t与'-1';比如numpy.重塑?,python,numpy,resize,reshape,Python,Numpy,Resize,Reshape,我了解到numpy.reformate并不能真正改变数组的形状。好啊我可以使用numpy.resize。那很好 我的问题是为什么使用“np.resize”时“-1”表示法不起作用?就像“np.重塑”一样 myarray = np.arange(16) myarray.resize((4,-1)) 给我 --------------------------------------------------------------------------- ValueError

我了解到
numpy.reformate
并不能真正改变数组的形状。好啊我可以使用
numpy.resize
。那很好

我的问题是为什么使用“np.resize”时“-1”表示法不起作用?就像“np.重塑”一样

myarray = np.arange(16)

myarray.resize((4,-1))
给我

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-606-aa09b20c947a> in <module>
      1 myarray = np.arange(16)
      2 
----> 3 myarray.resize((4,-1))

ValueError: negative dimensions not allowed
---------------------------------------------------------------------------
ValueError回溯(最近一次调用上次)
在里面
1 myarray=np.arange(16)
2.
---->3 myarray.resize((4,-1))
ValueError:不允许负维度
正如我所检查的,resize不允许负参数。 这是重塑(和其他一些方法,但不是调整大小)的一个功能

如果要创建一个新的数组,请将代码更改为:

myNewArray = myarray.reshape((4,-1)).copy()
另一种就地更改形状的解决方案:

myarray.shape = (4, -1)

在这里,您可以将-1作为新形状元组的一个元素传递。

由于重塑(方法或函数)不会更改元素的总数,因此它可以安全地计算一个维度(给定其他维度)

resize
可以更改元素的总数,因此无法安全地对所需的尺寸进行任何假设

查看代码,无论是在其他
numpy
函数中,还是在答案中,您都会发现
restrape
被广泛使用。它没有在适当的位置运行这一事实通常不是问题。它返回一个
视图
(如果可能),因此时间不是问题

由于
resize
可以更改元素的数量,因此它可能更危险(但有时更有用)。请记住,函数表单填充的值与方法表单不同

我经常使用

arr = np.arange(24).reshape(2,3,4)