我有一個使用 interp1d 創建的插值函式 f(x)。
現在從函式 f(x),我必須構造一個函式 f(y,z),其中 x=(yz)/2。
我正在使用這樣的嵌套回圈:
f = lambda x: x**3
y = np.arange(0,100)
z = np.arange(0,100)
fnew = np.zeros((100,100))
for i in range(0,100):
for j in range(0,100):
fnew[i,j] = f((y[j]-z[i])/2)
為了說明,我采用了函式 f=x^3。但是,由于我正在為 i 和 j 迭代約 8000 個值,并且由于 f(x) 是一個插值函式,因此回圈需要很長時間(顯然)并且 numba 無法作業。
有沒有更好的方法來實作這一目標?
uj5u.com熱心網友回復:
我會利用廣播規則:
f = lambda x: x ** 3
y = np.arange(100)
z = np.arange(100)
fnew = f((y[np.newaxis, :] - z[:, np.newaxis]) * 0.5)
uj5u.com熱心網友回復:
不確定它如何與 numba 一起使用,但我認為創建新函式的大多數 pythonic 方法是這樣的:
g = lambda y, z: f((y-z)/2)
這樣你就可以在回圈中簡單地做到這一點:
fnew[i,j] = g(i, j)
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/366754.html
