我正在寻找一个非正态分布的随机数组和一些定义的区间中的值,比如从-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左右。一个人必须聪明并以代数方式重新调整输出,或者是否有更快的修复?
答案 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生成目标分配,还有其他选择,但接受/拒绝是您使用库函数的最佳选择。