假設n是一個變數,我使用一個簡單的矩陣示例。
import numpy as np
n = 2
matrix = np.array([[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]])
desired_output = np.array([[nan, nan, 10, 15, 20, 25, 30, 35, nan, nan],
[nan, nan, 10, 15, 20, 25, 30, 35, nan, nan]])
所以desired_output[i] = 區間矩陣[i - n, i n]中的元素之和,包括兩者。有沒有辦法使用 NumPy 而無需 python 迭代來做到這一點?陣列中的數字可以是任意的。
uj5u.com熱心網友回復:
您可以在 1.20 中使用我最喜歡的東西之一添加到 numpy: numpy.lib.stride_tricks.sliding_window_view
import numpy as np
matrix = np.array([[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]])
n = 2
首先,應用滑動視窗視圖:
window_size = 2 * n 1
arr = np.lib.stride_tricks.sliding_window_view(matrix, window_size, axis=1)
然后在最后一個軸上求和:
arr = arr.sum(axis=2)
這給了你:
>>> arr
array([[10, 15, 20, 25, 30, 35],
[10, 15, 20, 25, 30, 35]])
據我所知,numpy 中沒有整數 NaN,因此您的整數/nan 輸出是不可能的。如果你想要浮動,你可以很容易地用 nans 填充:
arr_padded = np.full((arr.shape[0], arr.shape[1] 2 * n), np.nan)
arr_padded[:, n:-1 * n] = arr
>>> arr_padded
array([[nan, nan, 10., 15., 20., 25., 30., 35., nan, nan],
[nan, nan, 10., 15., 20., 25., 30., 35., nan, nan]])
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/419131.html
標籤:
