我有一個 x 和 y 值陣列(長度相同)
x = np.array([0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8])
y = np.array([3, 4, 2, 6, 2, 3, 2, 10, 6, 4, 2, 3, 1, 8, 3, 1, 6, 4])
我有一個單獨的資料框
df = pd.DataFrame({'Time': [0.3, 1.1], 'Duration': [0.2, 0.4]})
我想將(對于任何)y對應的索引x之間的值歸零,從而產生以下結果:df['Time'][i] <= x < df['Time'][i] df['Duration'][i]i
y_out = np.array([3, 4, 0, 0, 2, 3, 2, 10, 6, 4, 0, 0, 0, 0, 3, 1, 6, 4])
注意:我必須在數百萬點上這樣做,所以它必須相對較快......
uj5u.com熱心網友回復:
您可以使用np.greater_equal'outer函式使其矢量化。
mask = (np.greater_equal.outer(x, df['Time'].to_numpy())
& np.less.outer(x, (df['Time'] df['Duration']).to_numpy())).any(1)
然后簡單
y[mask] = 0
使用外積意味著您將以矢量化的方式將陣列x的所有值與df. 這速度很快,但在記憶體方面成本很高。
考慮將處理劃分為塊,以防整個操作不適合記憶體。
uj5u.com熱心網友回復:
我會使用邏輯運算 np.multiply然后像這樣映射:
np.multiply(y, ((x < record['Time']) | (x > record['Time'] record['Duration'])))
這是一個作業示例:https ://abstra.show/4qgrdKVzLP
參考:
- np.multiply
- 邏輯或
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/487632.html
下一篇:資料框列的曲線下面積
