python - 第二次运行 np.empty

标签 python arrays numpy scipy ipython

在 Scipy 文档中写道:

The function zeros creates an array full of zeros, the function ones creates an array full of ones, and the function empty creates an array whose initial content is random and depends on the state of the memory. By default, the dtype of the created array is 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 的内存字节中保存的内容。如果那里有除零以外的东西,那么这些将被解释为请求的数据类型(看似随机但更好的词是不可预测的)。

在您的示例中,您没有保存第一个数组,因此第一个数组的内存立即被重新使用。

>>> import numpy as np
>>> print(id(np.empty((20))))
2545385324992
>>> print(id(np.empty((20))))
2545385324992

现在到了令人惊叹的部分:似乎 Python(或 NumPy 或您的操作系统)在将内存再次提供给 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/

相关文章:

python - Python 中 3D 点数组的欧氏距离

python - 如何使用 NumPy C API 创建数组切片?

python - 如何忽略某些警告,而其他警告则从 Python 命令行转向异常?

python - while 循环不适用于二十一点

python - 可以在 Python 扩展对象中使用宽字符成员吗?

arrays - 如何删除数组数组中的 [""]?

php - 如何将数组中的所有内容写入php文件?

通过将数字替换为数字,将句子转换为数字。例如使用 strcmp 将 ABCD 转换为 2223

python-2.7 - 如何在python中使用内核计算图像的梯度

python - 使用 python 'aiohttp' 发送文件产生 "There was an error parsing the body"