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