0

假设我有一个一维数据数组。我想(有效地)生成一个矩阵,使得矩阵的每一行都是数据数组中连续的值范围,并且矩阵的每一行(在原始数据数组中)偏移 1,相对于上一行。

这个例子可能会让它更容易理解:

# fake data, for demonstration
data = np.arange(100) 

# some parameters
offset = 4
span = 10
n = 20

# one way to do this, I'm guessing the for loop is not the most efficient
np.stack([data[i+offset:i+offset+span] for i in range(n)])

产生:

array([[ 4,  5,  6,  7,  8,  9, 10, 11, 12, 13],
       [ 5,  6,  7,  8,  9, 10, 11, 12, 13, 14],
       [ 6,  7,  8,  9, 10, 11, 12, 13, 14, 15],
       [ 7,  8,  9, 10, 11, 12, 13, 14, 15, 16],
       [ 8,  9, 10, 11, 12, 13, 14, 15, 16, 17],
       [ 9, 10, 11, 12, 13, 14, 15, 16, 17, 18],
       [10, 11, 12, 13, 14, 15, 16, 17, 18, 19],
       [11, 12, 13, 14, 15, 16, 17, 18, 19, 20],
       [12, 13, 14, 15, 16, 17, 18, 19, 20, 21],
       [13, 14, 15, 16, 17, 18, 19, 20, 21, 22],
       [14, 15, 16, 17, 18, 19, 20, 21, 22, 23],
       [15, 16, 17, 18, 19, 20, 21, 22, 23, 24],
       [16, 17, 18, 19, 20, 21, 22, 23, 24, 25],
       [17, 18, 19, 20, 21, 22, 23, 24, 25, 26],
       [18, 19, 20, 21, 22, 23, 24, 25, 26, 27],
       [19, 20, 21, 22, 23, 24, 25, 26, 27, 28],
       [20, 21, 22, 23, 24, 25, 26, 27, 28, 29],
       [21, 22, 23, 24, 25, 26, 27, 28, 29, 30],
       [22, 23, 24, 25, 26, 27, 28, 29, 30, 31],
       [23, 24, 25, 26, 27, 28, 29, 30, 31, 32]])

我显然已经想出了如何做到这一点,但我认为必须有一种更有效的 numpythonic 方法来避免 for-loop/stack。我将需要做很多(在另一个循环中)并且希望最大化性能。

TIA

4

0 回答 0