sách gpt4 ăn đã đi

Tại sao `nan == nan` Sai và nan trong [nan] True trong Numpy?

In lại Tác giả: IT Lão Cao 更新时间:2023-10-28 21:58:31 27 4
mua khóa gpt4 giày nike

虽然问题的第一部分(在标题中)之前已经回答过几次(即 Why is NaN not equal to NaN? ),但我不明白为什么第二部分会以它的方式工作(受此启发问题 How to Check list containing NaN )?

即:

>> nan == nan
SAI

>> nan in [nan]
ĐÚNG VẬY

考虑到@DSM 的答案的问题的解释性附录。那么,为什么 float("nan") 的行为与 nan 不同?它不应该再次评估为简单的 nan 吗?为什么解释器会这样?

>> x = float("nan")
>> y = nan
>> x
nan
>> y
nan
>> x is nan, x is float("nan"), y is nan
(False, False, True)

基本上,它在第一种情况下引用相同的通用 nan,但在第二种情况下创建单独的对象:

>> nans = [nan for i in range(2)]
>> map(id, nans)
[190459300, 190459300]
>> nans = [float("nan") for i in range(2)]
>> map(id, nans)
[190459300, 190459301]

câu trả lời hay nhất

nan 不等于 nan Đúng nan 定义的一部分,所以这部分很简单。

Đối với nan in [nan] 为 True,这是因为在列表中包含相等性之前测试了身份。您正在比较相同的两个对象。

如果你用两个 khác biệt nan 尝试同样的事情,你会得到 False:

>>> nans = [float("nan") for i in range(2)]
>>> map(id, nans)
[190459300, 190459284]
>>> nans
[nan, nan]
>>> nans[0] is nans[1]
SAI
>>> nans[0] in nans
ĐÚNG VẬY
>>> nans[0] in nans[1:]
SAI

您的附录与 nan 没有太大关系,这就是 Python 的工作原理。一旦您了解 float("nan") 没有义务返回一些 nan 单例,并且 y = x 不会复制 x 而是将名称 绑定(bind)到由 x 命名的对象,没有什么可获取的。

关于python - 为什么在 numpy `nan == nan` 中为 False 而 [nan] 中的 nan 为 True?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20320022/

27 4 0
Cựu chiến binh CNTT
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress