在没有for循环的情况下围绕一组坐标生成随机数
Generating random numbers around a set of coordinates without for loop
我有一组坐标均值 (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 更快地完成它,并且一次调用,有人知道我应该如何编码吗?
您可以重复 means
和 stds
数组 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)
或者使用 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)))
我有一组坐标均值 (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 更快地完成它,并且一次调用,有人知道我应该如何编码吗?
您可以重复 means
和 stds
数组 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)
或者使用 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)))