为何np.empty与np.zeros比较为True,与另一个np.empty比较为False?
问题解析:numpy.empty() 与数组比较的行为差异
首先得明确 numpy.empty() 和 numpy.zeros() 的核心区别:
numpy.zeros(n)会创建一个长度为n的数组,并显式把所有元素初始化为0,这是完全确定的行为。numpy.empty(n)只会给数组分配内存空间,不会对元素做任何初始化,数组里的元素值是内存中残留的随机垃圾值——完全取决于当前内存的状态,没有任何规律可言。
现在拆解你的两个例子:
- 第一个例子
numpy.empty(3) == numpy.zeros(3)返回全True,纯粹是巧合:那次调用empty时,分配到的内存块刚好残留了0值,所以和全0数组比较才会全匹配。你多运行几次这个代码,大概率会得到不同的结果,因为每次分配的内存残留值可能不一样。 - 第二个例子
numpy.empty(3) == numpy.empty(3)返回全False,这才是更普遍的情况:两次调用empty分配的是不同的内存块,里面的残留垃圾值自然不一样,所以元素一一比较后全是False。
你的误解在于误以为empty会自动初始化为0,但实际上empty的设计目的是跳过初始化步骤来提升性能,如果你需要确定的初始值,应该用zeros、ones或者full这类会初始化的函数,绝对不能依赖empty的初始元素值。
内容的提问来源于stack exchange,提问作者kenta_desu
相关产品推荐
相关产品推荐

