假设我有以下两个数组,其中包含均值和标准差:
mu = np.array([2000, 3000, 5000, 1000])
sigma = np.array([250, 152, 397, 180])
字符串
然后:
a = np.random.normal(mu, sigma)
In [1]: a
Out[1]: array([1715.6903716 , 3028.54168667, 4731.34048645, 933.18903575])
型
但是,如果我要求对mu,sigma的每个元素进行100次抽奖:
a = np.random.normal(mu, sigma, 100)
a = np.random.normal(mu, sigma, 100)
Traceback (most recent call last):
File "<ipython-input-417-4aadd7d15875>", line 1, in <module>
a = np.random.normal(mu, sigma, 100)
File "mtrand.pyx", line 1652, in mtrand.RandomState.normal
File "mtrand.pyx", line 265, in mtrand.cont2_array
ValueError: shape mismatch: objects cannot be broadcast to a single shape
型
我也尝试过使用元组来表示大小:
s = (100, 100, 100, 100)
a = np.random.normal(mu, sigma, s)
型
我错过了什么?
3条答案
按热度按时间35g0bw711#
我不相信当你传递一个mean和std的值的列表/向量时,你可以控制size参数。相反,你可以遍历每一对,然后连接:
字符串
这给了你一个
(400, )
数组。如果你想要一个(4, 100)
数组,调用np.array
而不是np.concatenate
。xsuvu9jc2#
如果你只想做一次调用,正态分布很容易在事后进行移位和重新缩放(我正在从你的例子中制作一个10000长的
mu
和sigma
向量):字符串
这很好用。你可以决定速度是否是一个问题。在我的系统上,以下只是慢了50%:
型
vkc1a9a23#
这是一个老问题,但我最近遇到了同样的问题,目前文档还不清楚,所以我的回答可能对其他人有用。
问题是,如果你想从具有
n_param
不同参数的(不相关的)正态分布中绘制n_sample
样本,函数的size
参数需要是元组(n_sample, n_param)
。回到你的例子:字符串
它返回
型