np.argmin? import numpy as np In [73]: m = np.array([np-6ren">
gpt4 book ai didi

python - 为什么 `NaN` 在 numpy 中被认为是 "smaller"而不是 `-np.inf`?

转载 作者:太空狗 更新时间:2023-10-30 01:05:53 25 4
gpt4 key购买 nike

在涉及 np.min 的任何比较中,NaN 被认为小于 -np.inf 的原因是什么>np.argmin?

import numpy as np
In [73]: m = np.array([np.nan, 1., 0., -np.inf])
In [74]: n = np.array([-np.inf, 1., 0., np.nan])

# Huh??
In [75]: np.min(m)
Out[75]: nan
In [76]: np.min(n)
Out[76]: nan

# Same for np.argmin
In [77]: np.argmin(m)
Out[77]: 0
In [78]: np.argmin(n)
Out[78]: 3

# Its all false!
In [79]: np.nan < -np.inf
Out[79]: False

In [80]: np.nan > -np.inf
Out[80]: False

# OK, that seems to fix it, but its not necessarily elegant
In [81]: np.nanmin(m)
Out[81]: -inf

In [82]: np.nanargmin(m)
Out[82]: 3

我猜想这可能是与返回 FalseNaN 值进行任何比较的副作用,但是当您“碰巧”有时在数组中以 NaN 值结尾。 np.nanminnp.nanargmin 的使用感觉像是一种快速修复,以某种方式固定在现有行为之上。

除了 docs 中的注释: "NaN 值被传播,也就是说,如果至少有一项是 NaN,相应的最小值也将是 NaN。要忽略 NaN 值(MATLAB 行为),请使用 nanmin。,我还没有没有找到任何可以解释该行为背后的基本原理的内容。这是NaN 值的特定内部表示所需要的还是副作用?为什么?

最佳答案

正如@Dunno 在评论中提到的,将 NaN 与数字进行比较并没有多大意义,因此这种行为可能没问题。 IEEE 754 标准是这样描述 NaN 与数字的比较的:

Four mutually exclusive relations are possible: less than, equal, greater than, and unordered. The last case arises when at least one operand is NaN. Every NaN shall compare unordered with everything, including itself

根据标准:

# Its all false!
In [79]: np.nan < -np.inf
Out[79]: False

会导致“无序”结果,因此属于“小于”关系是不正确的。

关于python - 为什么 `NaN` 在 numpy 中被认为是 "smaller"而不是 `-np.inf`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41486495/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com