numpy.ndarray文档指出:
我对这里的形容词“通常”感到惊讶。我认为ndarray总是固定大小的。那么什么情况下ndarray的大小不是固定的?ndarray是一种(通常为固定大小的)相同类型和大小的多维容器。
我对这里的形容词“通常”感到惊讶。我认为ndarray总是固定大小的。那么什么情况下ndarray的大小不是固定的?ndarray是一种(通常为固定大小的)相同类型和大小的多维容器。
您可以重新定义数组的维度,因此内存本身是固定大小的,但您可以调整其形状(因此可能不是固定尺寸)。
您可以使用resize
重新调整数组的大小,但实际上这相当于创建了一个新的数组。
您可以使用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.]])
x.shape
),但不会改变大小(x.size
或x.nbytes
)——除非我可以改变dtype?啊,确实我可以改变dtype。x = arange(10, dtype="u2"); x.dtype = "u1"
实际上确实改变了x.size
(但不是x.nbytes
)。您可以将更改dtype
添加到答案中(我从未在实时代码中执行过此操作,尽管我已创建对应于不同dtypes
的视图)。 - gerrit