3 回答

TA貢獻1798條經驗 獲得超7個贊
在過去的幾天里,我也一直在嘗試做類似的事情。我終于設法做到了np.vectorize,使用函數簽名。試試下面的代碼片段:
fn_vectorized = np.vectorize(interpolate.interp1d,
signature='(n),(n)->()')
interp_fn_array = fn_vectorized(x[np.newaxis, :, :], y)
在這里,我正在對 interp1d 函數進行矢量化。x 和 y 是形狀 (mxn) 的數組。目標是為x 的第 i 行和y的第i行生成一個插值函數數組。數組“interp_fn_array”包含插值函數(形狀為(1 xm)。

TA貢獻1794條經驗 獲得超8個贊
它可能取決于您需要執行的操作,如果它是一個簡單的總和,那么以下將起作用:
import numpy as np
a = np.arange(3*2*20).reshape((20,3,2))
b = np.arange(2*20).reshape((20,2))
res = (a.transpose((1,2,0))+b.transpose((1,0))).transpose((2,0,1))
print(a[0],b[0])
[[0 1]
[2 3]
[4 5]] [0 1]
print(res[0])
[[0 2]
[2 4]
[4 6]]
首先,輸入數據被轉置,以便在廣播操作中涉及正確的維度。求和后,輸出轉回。

TA貢獻1827條經驗 獲得超4個贊
使用 numpy 的vectorize。
np.vectorize使用簡單 lambda 函數的簡單示例:
import numpy as np
f = np.vectorize(lambda x: 2*x)
f([[2,3],[3,4],[1,1]])
# output:
array([[4, 6],
[6, 8],
[2, 2]])
添加回答
舉報