任何人都可以向我解释这个吗? (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]])
为什么要查看数组会创建对它的引用? (或者,至少,为什么在我看完之后这个参考仍然存在?) 另外,它只是我还是异常需要重写一次?
答案 0 :(得分:14)
来自documentation(强调我的):
引用计数检查的目的是确保不要将此数组用作另一个Python对象的缓冲区,然后重新分配内存。但是,引用计数可能会以其他方式增加,因此如果您确定没有与另一个Python对象共享此数组的内存,那么您可以安全地将
refcheck
设置为False
强>
与print
不同,您的“窥视”不会减少之后的引用计数。这是因为,在解释器中,最后一次计算的结果被分配给_
。尝试:
print(_) # shows array
a.resize((3, 2), refcheck=False) # works
或者,如果您在中间进行任何其他计算(例如,仅1 + 2
),则会从_
取消引用您的数组。