假设我有一个一维数据数组。我想(有效地)生成一个矩阵,使得矩阵的每一行都是数据数组中连续的值范围,并且矩阵的每一行(在原始数据数组中)偏移 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