xnx*_*xnx 15 python resize numpy exception
任何人都可以向我解释这个吗?(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]])
Run Code Online (Sandbox Code Playgroud)
为什么看一下数组会创建一个引用呢?(或者,至少,为什么在我看完之后这个引用仍然存在?)另外,它只是我还是那个Exception需要重写一下?
jon*_*rpe 14
从文档(强调我的):
引用计数检查的目的是确保不将此数组用作另一个Python对象的缓冲区,然后重新分配内存.但是,引用计数可能会以其他方式增加,因此如果您确定没有与另一个Python对象共享此数组的内存,则可以安全地设置
refcheck
为False
.
与之不同print
,你的"偷看" 并不会减少参考计数.这是因为,在解释器中,分配了最后一次计算的结果_
.尝试:
print(_) # shows array
a.resize((3, 2), refcheck=False) # works
Run Code Online (Sandbox Code Playgroud)
或者,如果您1 + 2
在中间进行任何其他计算(例如,只是),这将取消引用您的数组_
.
归档时间: |
|
查看次数: |
6028 次 |
最近记录: |