假设我有以下矩阵:
X = np.array([[1,2,3], [4,5,6], [7,8,9], [70,80,90], [45,43,68], [112,87,245]])
我想在每个时间循环中绘制一批2个随机行,并将其发送到函数。例如,迭代i
中的批处理可以是batch = [[4,5,6], [70,80,90]]
我执行以下操作:
X = np.array([[1,2,3], [4,5,6], [7,8,9], [70,80,90], [45,43,68], [112,87,245]])
def caclulate_batch(batch):
pass
for i in range(X.shape[0]/2):
batch = np.array([])
for _ in range(2):
r = random.randint(0, 5)
batch = np.append(batch, X[r])
caclulate_batch(batch)
这里有两个问题:(1)它返回附加数组(2)可以重复随机数,可以多次选择同一行。如何修改代码以满足我的要求。
答案 0 :(得分:1)
r = np.random.randint(0, len(x), 2)
应该为你提供指数。这允许您使用花式索引来获取子集:batch = x[r, :]
。
如果您希望沿着新维度累积数组,就像您的循环一样,请使用np.stack
或np.block
代替np.append
。
答案 1 :(得分:1)
(1)您可以使用numpy.stack
代替append
。编辑:但是当您在列表中包含所有批次时,将调用此函数:
list = ([1,2], [3,4])
numpy.stack(list)
# gives [[1,2],
# [3,4]]
(2)你可以随机播放X数组,遍历结果并逐两提取。看numpy.random.shuffle
看起来像那样:
S = np.random.shuffle(X)
for i in range(S.shape[0]/2):
batch = S[i*2:i*2+1]
caclulate_batch(batch)