如何将一些非正态分布的np.random值限制为一个区间?

时间:2017-01-11 15:26:11

标签: python numpy random

我正在寻找一个非正态分布的随机数组和一些定义的区间中的值,比如从-100到100.我无法看到如何使用numpy.random.name_of_distribution中提供的参数。例如,

k = np.random.noncentral_chisquare(1, 50, 100)

有参数(自由度,非中心性和大小)。值的范围似乎取决于我设置非中心性的位置;换句话说,将其更改为90会将分配的顶端移动到120或130.

np.random.exponential(10,100) 

产生的范围从0到60左右。一个人必须聪明并以代数方式重新调整输出,或者是否有更快的修复?

1 个答案:

答案 0 :(得分:2)

如果输入分布具有有界范围,则以代数方式重新缩放是最简单的解决方案。但是,您选择的struct A {}; struct B : public A {} b; int f(A&); int f(B&); int i = f(b); // calls f(B&), an exact match, rather than // f(A&), a conversion 示例上面没有限制。在这种情况下,您需要使用类似接受/拒绝方案的东西来丢弃大于某个上限的值。只要您适当调整重新缩放参数化,就可以在代数重新缩放之前或之后完成。

如果您直接通过inversion sampling生成目标分配,还有其他选择,但接受/拒绝是您使用库函数的最佳选择。