我有一個復雜的函式,包括 (sin(x)/x)。在 x=0 時,此函式的限制為 1,但數值計算時為 NaN。
在計算大量值時,此函式被矢量化以獲得高性能,但在 x=0 時失敗。
這個問題的簡化版本如下所示。
import numpy as np
def f(x):
return np.sin(x)/x
x = np.arange(-5,6)
y = f(x)
print(y)
執行時,回傳:
... RuntimeWarning: true_divide return np.sin(x)/x 中遇到無效值
[-0.19178485 -0.18920062 0.04704 0.45464871 0.84147098 南 0.84147098 0.45464871 0.04704 -0.18920062 -0.19178485]
這可以通過捕獲錯誤、查找 nan 并替換限制來解決。
有沒有更好的方法來處理這樣的功能?
注意:該函式比 sin(x)/x 更復雜。極限是知道的。sinc 的使用不是一種選擇。sin(x)/s 用于說明問題。
uj5u.com熱心網友回復:
您可以嘗試使用 true_divide withwhere來指定要劃分的位置,并out傳入一個輸出陣列,該陣列包含您在不想劃分的位置所期望的結果。不確定這是否是最佳解決方案,但這會奏效。在應該閱讀 liad 的代碼中
res = np.true_divide(sin(x), x, where=x!=0, out=np.ones_like(x))
uj5u.com熱心網友回復:
當我在做我的情節時,我已經習慣了這個選項:
x = np.arange(-5, 6, dtype=float)
domain = x!=0
fill_with = np.nan
f = np.divide(np.sin(x), x, out=np.full_like(x, fill_with), where=domain)
您可以自定義任何域和值以填充域外。
uj5u.com熱心網友回復:
您可以使用numpy sinc的實作。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/420100.html
標籤:
上一篇:用于簡單計算的大量dask任務
