Python 一次从Numpy数组中选择多个切片

Python 一次从Numpy数组中选择多个切片,python,numpy,indexing,Python,Numpy,Indexing,我想实现一个矢量化的SGD算法,并希望一次生成多个小批量 假设data=np.arange(01100),miniBatchSize=10,n\u minibatchs=10和index=np.random.randint(0,n\u minibatchs,5)(5个minibatchs)。我想实现的是 miniBatches = np.zeros(5, miniBatchSize) for i in range(5): miniBatches[i] = data[indices[i]

我想实现一个矢量化的SGD算法,并希望一次生成多个小批量

假设
data=np.arange(01100)
miniBatchSize=10
n\u minibatchs=10
index=np.random.randint(0,n\u minibatchs,5)
(5个minibatchs)。我想实现的是

miniBatches = np.zeros(5, miniBatchSize)
for i in range(5):
     miniBatches[i] = data[indices[i]: indices[i] + miniBatchSize]
有没有办法避免for循环

谢谢

可以使用以下方法完成:


您必须执行某种Python级别的循环。您可以像在这里所做的那样组合切片,也可以生成索引范围、连接这些范围和一个索引。所有备选方案的速度大致相同。另一个选项是,以
作为步长生成此大小的所有切片,并选择子集。
from numpy.lib.stride_tricks import as_strided

a = as_strided(data[:n_miniBatches], shape=(miniBatchSize, n_miniBatches), strides=2*data.strides, writeable=False)    
miniBatches = a[:, indices].T


# E.g. indices = array([0, 7, 1, 0, 0])
Output:
array([[ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9],
       [ 7,  8,  9, 10, 11, 12, 13, 14, 15, 16],
       [ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10],
       [ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9],
       [ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9]])