刚接触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()?但如果是这样,后者就没有意义了。
bjp0bcyl1#
*numpy.empty*函数创建指定形状的新数组,但不使用值对其进行初始化。相反,它保留数组元素未初始化,这意味着它们可以包含创建数组时内存中的随机值。
而*numpy.zeros*也会创建一个指定形状的新数组,但会将其中的元素初始化为0.0所以当你比较这两个数组时,会发生这样的情况:[1.23456789e-312, 2.96439388e-323, 2.47032823e-323] == [0.0, 0.0, 0.0]
[1.23456789e-312, 2.96439388e-323, 2.47032823e-323] == [0.0, 0.0, 0.0]
neskvpey2#
所以,事实证明这只是我的Jupyter笔记本中的一个环境问题。我问这个问题是因为我在第一次检查时总是得到True的答案,但是当我在本地或在线编译器上运行相同的答案时,它给出了不同的答案。以上所有答案都有贡献。
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)
3条答案
按热度按时间bjp0bcyl1#
*numpy.empty*函数创建指定形状的新数组,但不使用值对其进行初始化。相反,它保留数组元素未初始化,这意味着它们可以包含创建数组时内存中的随机值。
而*numpy.zeros*也会创建一个指定形状的新数组,但会将其中的元素初始化为0.0
所以当你比较这两个数组时,会发生这样的情况:
[1.23456789e-312, 2.96439388e-323, 2.47032823e-323] == [0.0, 0.0, 0.0]
neskvpey2#
所以,事实证明这只是我的Jupyter笔记本中的一个环境问题。我问这个问题是因为我在第一次检查时总是得到True的答案,但是当我在本地或在线编译器上运行相同的答案时,它给出了不同的答案。以上所有答案都有贡献。
jrcvhitl3#
np.empty函数创建空间或存储位置的数组,而np.zeros创建零的数组。np.empty == np.zeros首先尝试分配两个函数的值以便进行比较。在这个过程中,由于np.empty只创建了空格,它会自动保存数组的值,从np.zeros开始,这就是为什么在比较后它说true。np.empty()== empty()将始终为假,因为它们都在不同的存储位置。为了做到这一点,将两个函数分配给单独的变量,以便在比较之前保存这些变量中的值。