在Scipy文件中写道:
函数零将创建一个由零组成的数组,函数一个将创建由零组成的数组,函数空将创建一个数组,其初始内容是随机的,并取决于内存的状态。默认情况下,创建的数组的dtype为float64。
所以我运行了这段代码:
import numpy as np np.empty((1,2))
返回:
array([[ 6.92892901e-310, 8.42664136e-317]])
因此,它返回一个随机数,并且一切都很好。
但是,当我第二次运行该代码(在该shell中)时,它返回一个零数组!
np.empty((1,2)) array([[ 0., 0.]])
问题是,为什么第二次返回零数组(而不是随机数)?
它不是随机的,它取决于计算机NumPy为数组请求一些空间时所提供的内存字节数。如果那里不是零,则将使用请求的dtype进行解释(看似随机,但更好的单词是不可预测的)。
NumPy
在您的示例中,您没有保存第一个阵列,因此立即重用了第一个阵列的内存。
>>> import numpy as np >>> print(id(np.empty((20)))) 2545385324992 >>> print(id(np.empty((20)))) 2545385324992
现在出现了令人惊讶的部分:似乎Python(或NumPy或您的OS)将内存归零,然后 再次将 其提供给NumPy 。
如果您创建的数组比其他数组大,那么它将不会是“零”,因为它是从其他地方获取的:
>>> print(np.empty((1, 2))) [[ 1.25757479e-311 1.25757479e-311]] >>> print(np.empty((1, 3))) [[ 4.94065646e-324 9.88131292e-324 1.25757705e-311]]