【Python】与概率有关的random模块

random()

返回一个位于区间 [0,1] 内的实数;

uniform(a, b)

返回一个位于区间 [a,b] 内的实数;

randint(a, b)

返回一个位于区间 [a,b] 内的整数;

choice(sequence)

返回一个位于 sequence 中的元素,其中,sequence 为一个有序序列,如 list、string 或者 tuple 等类型;

randrange([start], stop[, step])

等效于 choice(range([start], stop[, step]));

shuffle(sequence [, random])

无返回值,用于打乱 sequence 中元素的排列顺序;

sample(sequence, n)

返回一个由 n 个 sequence 中的元素组成的分片,其中,sequence 也可以是 set 类型。


randn()

正态分布随机数

For random samples from N(.mu, .sigma^2), use:

sigma*np.random.randn(...)+mu

one array of samples from N(0, 1):

np.random.randn()

>>> np.random.randn(1, 2)
array([[ 0.50822466, -0.04998563]])
>>> 
>>> np.random.randn(3, 2) 
array([[ 0.36340728, -0.74965395],
       [ 1.01761166, -0.65557717],
       [ 1.28313911,  1.717328  ]])
>>> 
>>> np.random.randn(3) 
array([-0.83033639,  1.01308907, -0.28808741])


更多见:http://www.cnblogs.com/yd1227/archive/2011/03/18/1988015.html

发布了392 篇原创文章 · 获赞 492 · 访问量 241万+
展开阅读全文

关于random的问题,以给定概率返回0/1.

10-04

输入给定per,当per小于0.2 时,最后a的个数达到给定值的概率反而变成0了,一直没搞懂,求指点 代码如下 #include <iostream> #include "random.h" #include "console.h" // for GWindow #include "simpio.h" // for getLine using namespace std; int main () { int voters=getInteger("Enter number of voters"); double can=getDouble("Enter percentage spread between candidates"); double per=getDouble("Enter voting error percentage"); int a=0; double inv=0; for(int j=0;j<500;j++){ for(int i=0;i<voters*can;i++){ if(randomChance(per)) a++; } if(a>=voters*can/2) inv++; a=0; } double ratio=1.0*inv*100/500; cout<<ratio<<"%"; return 0; } random.h: #include "random.h" #include <cstdlib> #include <cmath> #include <ctime> #include <queue> #include "private/static.h" /* Private function prototype */ static void initRandomSeed(); /* internal buffer of fixed random numbers to return; used by autograders */ STATIC_VARIABLE_DECLARE_COLLECTION_EMPTY(std::queue<bool>, fixedBools) STATIC_VARIABLE_DECLARE_COLLECTION_EMPTY(std::queue<int>, fixedInts) STATIC_VARIABLE_DECLARE_COLLECTION_EMPTY(std::queue<double>, fixedReals) namespace autograder { void randomFeedBool(bool value) { STATIC_VARIABLE(fixedBools).push(value); } void randomFeedClear() { STATIC_VARIABLE(fixedBools) = std::queue<bool>(); STATIC_VARIABLE(fixedInts) = std::queue<int>(); STATIC_VARIABLE(fixedReals) = std::queue<double>(); } void randomFeedInteger(int value) { STATIC_VARIABLE(fixedInts).push(value); } void randomFeedReal(double value) { STATIC_VARIABLE(fixedReals).push(value); } } /* end 'fixed' internal stuff */ bool randomBool() { return randomChance(0.5); } /* * Implementation notes: randomChance * ---------------------------------- * The code for randomChance calls randomReal(0, 1) and then checks * whether the result is less than the requested probability. */ bool randomChance(double p) { if (!STATIC_VARIABLE(fixedBools).empty()) { bool top = STATIC_VARIABLE(fixedBools).front(); STATIC_VARIABLE(fixedBools).pop(); return top; } initRandomSeed(); return randomReal(0, 1) < p; } int randomColor() { if (!STATIC_VARIABLE(fixedInts).empty()) { int top = STATIC_VARIABLE(fixedInts).front(); STATIC_VARIABLE(fixedInts).pop(); return top & 0x00ffffff; } initRandomSeed(); return rand() & 0x00ffffff; } // don't want to depend on gwindow.h extern std::string convertRGBToColor(int rgb); std::string randomColorString() { return convertRGBToColor(randomColor()); } /* * Implementation notes: randomInteger * ----------------------------------- * The code for randomInteger produces the number in four steps: * * 1. Generate a random real number d in the range [0 .. 1). * 2. Scale the number to the range [0 .. N) where N is the number of values. * 3. Translate the number so that the range starts at the appropriate value. * 4. Convert the result to the next lower integer. * * The implementation is complicated by the fact that both the expression * * RAND_MAX + 1 * * and the expression for the number of values * * high - low + 1 * * can overflow the integer range. These calculations must therefore be * performed using doubles instead of ints. */ int randomInteger(int low, int high) { if (!STATIC_VARIABLE(fixedInts).empty()) { int top = STATIC_VARIABLE(fixedInts).front(); STATIC_VARIABLE(fixedInts).pop(); if (top < low || top > high) { // make sure the value is in the given range // (assumes that low/high don't overflow int range) int range = high - low + 1; top = low + std::abs(top) % range; } return top; } initRandomSeed(); double d = rand() / (double(RAND_MAX) + 1); double s = d * (double(high) - low + 1); return int(floor(low + s)); } /* * Implementation notes: randomReal * -------------------------------- * The code for randomReal is similar to that for randomInteger, * without the final conversion step. */ double randomReal(double low, double high) { if (!STATIC_VARIABLE(fixedReals).empty()) { double top = STATIC_VARIABLE(fixedReals).front(); STATIC_VARIABLE(fixedReals).pop(); return top; } initRandomSeed(); double d = rand() / (double(RAND_MAX) + 1); double s = d * (high - low); return low + s; } /* * Implementation notes: setRandomSeed * ----------------------------------- * The setRandomSeed function simply forwards its argument to srand. * The call to initRandomSeed is required to set the initialized flag. */ void setRandomSeed(int seed) { initRandomSeed(); srand(seed); } /* * Implementation notes: initRandomSeed * ------------------------------------ * The initRandomSeed function declares a static variable that keeps track * of whether the seed has been initialized. The first time initRandomSeed * is called, initialized is false, so the seed is set to the current time. */ static void initRandomSeed() { static bool _initialized = false; if (!_initialized) { srand(int(time(nullptr))); rand(); // BUGFIX: throwaway call to get randomness going _initialized = true; } } 问答

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览