【发布时间】:2019-05-05 23:51:05
【问题描述】:
numpy.ndarray documentation 声明:
ndarray 是一个(通常是固定大小的)多维容器,包含相同类型和大小的项目。
我对这里的形容词通常感到惊讶。我认为 ndarray 始终是固定大小的。什么时候ndarray的大小不固定?
【问题讨论】:
标签: python numpy multidimensional-array numpy-ndarray
numpy.ndarray documentation 声明:
ndarray 是一个(通常是固定大小的)多维容器,包含相同类型和大小的项目。
我对这里的形容词通常感到惊讶。我认为 ndarray 始终是固定大小的。什么时候ndarray的大小不固定?
【问题讨论】:
标签: python numpy multidimensional-array numpy-ndarray
您可以重新塑造尺寸,因此内存本身是固定大小的,但您塑造它的方式可能会被调整(因此它可能不是固定尺寸)。
您可以使用resize 调整数组的大小,但它基本上是一个新数组。
【讨论】:
x.shape),但不会改变大小(x.size 或 x.nbytes)——除非我可以改变 dtype?啊,确实我可以改变dtype。 x = arange(10, dtype="u2"); x.dtype = "u1" 实际上确实改变了x.size(但不是x.nbytes)。您可以在答案中添加更改 dtype(我从未在实时代码中这样做过,尽管我创建了与不同 dtype 对应的视图)。
您可以使用 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.]])
【讨论】: