NumPy调整大小的方法

时间:2013-12-22 14:21:03

标签: python exception numpy resize

任何人都可以向我解释这个吗? (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]])

为什么要查看数组会创建对它的引用? (或者,至少,为什么在我看完之后这个参考仍然存在?) 另外,它只是我还是异常需要重写一次?

1 个答案:

答案 0 :(得分:14)

来自documentation(强调我的):

  

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

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

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

或者,如果您在中间进行任何其他计算(例如,仅1 + 2),则会从_取消引用您的数组。