围绕一组坐标生成随机数,而不是循环

时间:2017-05-23 10:28:23

标签: python numpy numpy-broadcasting numpy-random

我有一套坐标装置(3D)和一组标准偏差(3D),如下所示:

means = [[x1, y1, z1],
         [x2, y2, z2],
         ...
         [xn, yn, zn]]

stds = [[sx1, sy1, sz1],
        [sx2, sy2, sz2],
         ...
        [sxn, syn, szn]]

所以问题是N x 3

我希望使用np.random.normal()随机生成1000个坐标样本集(N x 3 x 1000)。目前我使用for循环生成样本:

for i in range(0,1000):
  samples = np.random.normal(means, stds)

但是我觉得我可以失去for循环并且让numpy更快地完成它并且在一次调用中,任何人都知道我应该如何编写它?

2 个答案:

答案 0 :(得分:4)

或者使用size参数:

import numpy as np

means = [ [0, 0, 0], [1, 1, 1] ]
std = [ [1, 1, 1], [1, 1, 1] ]

#100 samples
print(np.random.normal(means, std, size = (100, len(means), 3)))

答案 1 :(得分:0)

您可以重复meansstds阵列1000次,然后拨打np.random.normal()一次。

means = [[0, 0, 0],
         [1, 1, 1]]

stds = [[1, 1, 1],
        [2, 2, 2]]

means = numpy.array(means) * numpy.ones(1000)[:, None, None]
stds = numpy.array(stds) * numpy.ones(1000)[:, None, None]

samples = numpy.random.normal(means, stds)