可以修改 Julia 的 findmax 函数,使其不采用 NaN 值吗?

can the findmax function of Julia be modified so it doesnt take the NaN values?

因为我的 df 中有 NaN(它们不能被任何其他值替换),findmax() 函数 returns NaN 作为找到的最大值,这根本没有用...... 我一直在阅读几个博客和帖子,但一无所获。 更具体地说,无论如何我可以使这个功能像python的np.nanmax()?

findmaxnp.nanmax 不同。我假设您想要 np.nanmax 的功能,然后执行:

julia> your_vector = [1.0, NaN, 3.0, NaN, 2.0]
5-element Vector{Float64}:
   1.0
 NaN
   3.0
 NaN
   2.0

julia> maximum(skipmissing(isnan(x) ? missing : x for x in your_vector))
3.0

julia> your_vector = [NaN, NaN]
2-element Vector{Float64}:
 NaN
 NaN

julia> maximum(skipmissing(isnan(x) ? missing : x for x in your_vector))
ERROR: ArgumentError: reducing over an empty collection is not allowed

诀窍是用missing替换NaN(但不具体化结果以节省内存)然后跳过missing。请注意,我提出了一个解决方案,当仅存在 NaN 时会出错。在 Python 中你会收到警告,但在 Julia 中我们通常避免打印警告,因为它们很容易在不被注意的情况下丢失,而是需要明确的处理或错误情况。

现在您可能会问为什么 NaN 没有简单的解决方案,但是 missing 有一个解决方案(对于 missing,您只需写 maximum(skipmissing(your_vector)) )?答案是 NaN 值在 Julia 代码中通常不会遇到(除非你确实有一些计算产生 NaN),而在 Python 中 NaN 通常用作值这表明我们在数据中有缺失值(这很常见)。

也许比 skipmissing 更简单的解决方案(看起来也更快)是:

foo(itr) = maximum(x for x in itr if !isnan(x))