2013-12-22 61 views
13

任何人都可以解釋這一點嗎? (Python 3.3.2,numpy 1.7.1):NumPy調整大小的方法

>>> 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]]) 

爲什麼要在數組中創建一個引用呢? (或者至少,爲什麼在完成查找之後該引用仍然存在?) 另外,它只是我還是那個異常需要一點重寫?

+2

這不僅僅是你。異常信息缺少「參考」前面的「哪個」,並且可以使用健康的標點符號和大寫字母。 –

回答

10

documentation(重點煤礦):

引用計數檢查的目的是爲了確保你不使用這個數組作爲另一個Python對象的緩衝區,然後重新分配內存。但是,引用計數可能會以其他方式增加,因此如果您確定沒有與另一個Python對象共享此陣列的內存,那麼您可以安全地將設置爲refcheckFalse

與「print」不同,您的「窺視」不會在之後減少引用計數。這是因爲在解釋器中,最後一次計算的結果被分配到_。嘗試:

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

另外,如果你做-之間的任何其他計算(例如剛剛1 + 2),這將間接引用您的陣列從_

+0

有意義(比錯誤消息更重要)。也許它不應該,但是......我知道在數組上創建視圖會創建一個參考 - 其他操作是這樣做的嗎? – xnx

+2

在這種情況下,僅僅是因爲你使用瞭解釋器,它將最後一次計算的結果賦給'_'。我同意錯誤信息不是非常有幫助! – jonrsharpe

+0

明白了!我直到現在還不知道_。偷偷摸摸......謝謝! – xnx