2017-06-14 64 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

相关问题