数字大小调整方法



谁能向我解释一下?(Python 3.3.2, numpy 1.7.1):

>>> a = np.array([[1,2],[3,4]])
>>> a    # just a peek
array([[1, 2],
       [3, 4]])
>>> a.resize(3,2)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: cannot resize an array references or is referenced
by another array in this way.  Use the resize function
>>> a = np.array([[1,2],[3,4]])
>>> a.resize(3,2)
>>> a
array([[1, 2],
       [3, 4],
       [0, 0]])
>>> a = np.array([[1,2],[3,4]])
>>> print(a)   # look properly this time
[[1 2]
 [3 4]]
>>> a.resize(3,2)
>>> a
array([[1, 2],
       [3, 4],
       [0, 0]])

为什么看一眼数组会创建对它的引用?(或者,至少,为什么在我看完之后,该引用仍然存在?另外,是只有我一个人还是那个例外需要重写一下?

从文档(强调我的):

引用计数检查的目的是确保不要将此数组用作另一个 Python 对象的缓冲区,然后重新分配内存。但是,引用计数可以通过其他方式增加,因此如果您确定没有与另一个 Python 对象共享此数组的内存,则可以安全地将refcheck设置为 False

print不同,您的"窥视"不会在之后减少引用计数。这是因为,在解释器中,最后一次计算的结果被分配给_ 。尝试:

print(_) # shows array
a.resize((3, 2), refcheck=False) # works

或者,如果您在两者之间执行任何其他计算(例如,只是1 + 2),这将取消对数组_的引用。

最新更新