簡體   English   中英

一次從Numpy數組中選擇多個切片

[英]Select Multiple slices from Numpy array at once

我想實現矢量化SGD算法,並想一次生成多個迷你批次。

假設data = np.arange(0, 100)miniBatchSize=10n_miniBatches=10並且indices = np.random.randint(0, n_miniBatches, 5) (5 indices = np.random.randint(0, n_miniBatches, 5)批量)。 我想實現的是

miniBatches = np.zeros(5, miniBatchSize)
for i in range(5):
     miniBatches[i] = data[indices[i]: indices[i] + miniBatchSize]

有什么方法可以避免for循環嗎?

謝謝!

可以使用大步招來完成:

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]])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM