Python 一次从Numpy数组中选择多个切片
我想实现一个矢量化的SGD算法,并希望一次生成多个小批量 假设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]
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]])