如何在不使用 for 循环的情况下动态地对给定开始和结束索引的每一行进行切片。我可以使用下面列出的循环来完成此操作,但是对于 x.shape[0] > 1 mill 的情况来说,它太慢了
x= np.arange(0,100)
x = x.reshape(20,5)
s_idx = np.random.randint(0,3,x.shape[0])
e_idx = np.random.randint(3,6,x.shape[0])
print(s_idx)
>>> array([2, 1, 2, ..., 1, 0, 2])
print(e_idx)
>>> array([3, 4, 5, ..., 3, 3, 3])
print(x)
>>> array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
...,
[85, 86, 87, 88, 89],
[90, 91, 92, 93, 94],
[95, 96, 97, 98, 99]])
x_indexed = []
for idx,value in enumerate(s_idx):
x_indexed.append(x[idx][s_idx[idx]:e_idx[idx]])
print(x_indexed)
>>> [array([2]),
array([6, 7, 8]),
array([12, 13, 14]),
array([15, 16, 17]),
array([20, 21, 22, 23]),
array([26, 27, 28, 29]),
array([30, 31, 32, 33]),
array([35, 36, 37, 38, 39]),
array([40, 41, 42]),
array([46, 47, 48]),
array([52, 53, 54]),
array([56, 57]),
array([62, 63, 64]),
array([67]),
array([70, 71, 72, 73]),
array([77]),
array([80, 81, 82, 83, 84]),
array([86, 87]),
array([90, 91, 92]),
array([97])]