什么时候ndarray的大小不固定?

时间:2018-12-04 14:14:30

标签: python numpy multidimensional-array numpy-ndarray

numpy.ndarray documentation指出:

  

ndarray是具有相同类型和大小的项目的(通常为固定大小)多维容器。

我对这里的形容词通常感到惊讶。我认为ndarray始终是固定大小的。何时ndarray的大小不固定?

2 个答案:

答案 0 :(得分:2)

您可以调整形状的尺寸,因此内存本身是固定大小的,但是可以调整形状(因此它可能不是固定尺寸)。

您可以使用resize调整数组的大小,但这基本上是一个新数组。

答案 1 :(得分:2)

您可以使用ndarray.resize更改ndarray的大小。 我没有广泛使用它,所以我无法说出优点或缺点。 但是,这看起来很简单

>>> a = ones(3)

>>> a.resize(1)

>>> a
array([ 1.])

但是,它似乎经常会引发错误

>>> a.resize(3)
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-34-bc3af9ce5259> in <module>()
----> 1 a.resize(3)

ValueError: cannot resize an array that references or is referenced
by another array in this way.  Use the resize function

可以通过传入refcheck=False来抑制这些。 这告诉numpy您知道自己在做什么,并且不需要检查是否没有其他对象正在使用相同的内存。当然,如果不是这种情况,这可能会引起问题。

>>> a.resize(3, refcheck=False)

>>> a
array([ 1.,  0.,  0.])

>>> a.resize((2, 2), refcheck=False)

>>> a
Out[39]: 
array([[ 1.,  0.],
       [ 0.,  0.]])