numpy 为什么np.empty == np.zeros为真,而np.empty == np.zeros为假

kokeuurv  于 2023-05-17  发布在  其他
关注(0)|答案(3)|浏览(198)

刚接触python,可能会误解这里的一些基础知识,但在理解以下内容时遇到了麻烦。

print(numpy.empty(3) == numpy.zeros(3))

#Result
[True True True]
print(numpy.empty(3) == numpy.empty(3))

#Result
[False False False]

我最初的假设是.empty数组在调用比较时被初始化为.zeros()?但如果是这样,后者就没有意义了。

bjp0bcyl

bjp0bcyl1#

*numpy.empty*函数创建指定形状的新数组,但不使用值对其进行初始化。相反,它保留数组元素未初始化,这意味着它们可以包含创建数组时内存中的随机值。

而*numpy.zeros*也会创建一个指定形状的新数组,但会将其中的元素初始化为0.0
所以当你比较这两个数组时,会发生这样的情况:
[1.23456789e-312, 2.96439388e-323, 2.47032823e-323] == [0.0, 0.0, 0.0]

neskvpey

neskvpey2#

所以,事实证明这只是我的Jupyter笔记本中的一个环境问题。我问这个问题是因为我在第一次检查时总是得到True的答案,但是当我在本地或在线编译器上运行相同的答案时,它给出了不同的答案。以上所有答案都有贡献。

jrcvhitl

jrcvhitl3#

np.empty函数创建空间或存储位置的数组,而np.zeros创建零的数组。np.empty == np.zeros首先尝试分配两个函数的值以便进行比较。在这个过程中,由于np.empty只创建了空格,它会自动保存数组的值,从np.zeros开始,这就是为什么在比较后它说true。np.empty()== empty()将始终为假,因为它们都在不同的存储位置。为了做到这一点,将两个函数分配给单独的变量,以便在比较之前保存这些变量中的值。

import numpy as np
a = np.zeros(3)
b = np.empty(3)
print(a == b)

相关问题