2017-06-14 67 views
2

我通過什麼我在Python上的第82頁。爲什麼numpy.empty_like()返回一個用零填充的數組是不安全的?

In [25]: np.empty((2, 3, 2)) 
Out[25]: 
array([[[ 4.94065646e-324, 4.94065646e-324], 
     [ 3.87491056e-297, 2.46845796e-130], 
     [ 4.94065646e-324, 4.94065646e-324]], 
     [[ 1.90723115e+083, 5.73293533e-053], 
     [ -2.33568637e+124, -6.70608105e-012], 
     [ 4.42786966e+160, 1.27100354e+025]]]) 

讀取的數據分析這不是安全的假設,np.empty將返回全零的數組混淆。 在許多情況下,如前所示,它將返回未初始化的垃圾值。

numpy.zeros()返回與零的數組,但爲什麼是不安全的假設numpy.empty()不會是零的數組?

+0

他們所說的只是有時候這樣的數組全部是零,有時候它會是奇數的數字,比如那個例子。因此,只有在您將分配所有元素新值時才使用「空」。 – hpaulj

回答

2

numpy.empty()的實現不會將零值寫入其爲陣列預留的內存地址。這使得它更快,但留下了先前佔用內存空間的任何(垃圾)值。

+0

就像你說的那樣,'numpy.empty()'產生的數組中的值在創建數組之前就已經存在了。然後我認爲這些值可能是字符串或整型,但它們最終會被轉換爲float64。我對嗎? – l0o0

+0

@ l0o0是的,他們只是以前在這些地方記憶中的殘餘物。當內存被釋放時,它不會被零覆蓋,因爲這將是一個昂貴的過程。相反,數據只是保持原樣。 –

+0

謝謝你的幫助,@Will Da Silva – l0o0

相關問題