簡體   English   中英

np.vectorize和nan-我怎樣才能讓它們發揮得更好?

[英]np.vectorize and nan - how can I make them play nice?

假設我有

>>> import numpy as np
>>> nv = np.array([-1, np.nan, 1])

np.sin將按預期工作

>>> np.sin(nv)
array([-0.84147098,         nan,  0.84147098])

但是,如果我在自己的函數上嘗試使用vectorize,它將失敗

>>> def noneg(n):
        if n < 0:
             return 0
        return n
>>> noneg(nv)
...
ValueError: cannot convert float NaN to integer

這是因為noneg返回的初始化值是整數零,然后我們得到了一個浮點數nan

到目前為止,我發現的解決方案是:

>>> @np.vectorize
    def noneg(n):
        if not np.isnan(n) and n < 0:
            return n.__class__(0)
        return n
>>> noneg(nv)
array([  0.,  nan,   1.])

但這看起來很丑,在矢量化中是否有更好的方法忽略nan

嗯,您已經寫下答案了?

def noneg(n):
    if n < 0:
         return n.__class__(0)
    return n
noneg(nv)

我認為這里的問題是變量0與您的輸入類型無關。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM