在Scipy文件中写道:



所以我运行了这段代码:

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进行解释(看似随机,但更好的单词是不可预测的)。

在您的示例中,您没有保存第一个阵列,因此立即重用了第一个阵列的内存。

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

关于python - 第二次运行np.empty,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41948541/

10-12 22:23