Skip to content

Commit cccdc88

Browse files
committed
DOC: Improve README
Shorted README and remove unnecessary information [skip ci]
1 parent 5fe1235 commit cccdc88

File tree

1 file changed

+74
-77
lines changed

1 file changed

+74
-77
lines changed

README.md

Lines changed: 74 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,37 @@
1-
# ng-numpy-randomstate
1+
# randomstate
22
[![Build Status](https://travis-ci.org/bashtage/ng-numpy-randomstate.svg?branch=master)](https://travis-ci.org/bashtage/ng-numpy-randomstate)
33
[![Build status](https://ci.appveyor.com/api/projects/status/odc5c4ukhru5xicl/branch/master?svg=true)](https://ci.appveyor.com/project/bashtage/ng-numpy-randomstate/branch/master)
44

55
This is a library and generic interface for alternative random generators
6-
in Python and Numpy. This modules includes a number of alternative random
6+
in Python and Numpy.
7+
8+
Features
9+
10+
* Immediate drop in replacement for Numy's RandomState
11+
12+
```python
13+
# import numpy.random as rnd
14+
import randomstate as rnd
15+
x = rnd.standard_normal(100)
16+
y = rnd.random_sample(100)
17+
z = rnd.randn(10,10)
18+
```
19+
20+
* Default random generator is identical to NumPy's RandomState (i.e., same
21+
seed, same random numbers).
22+
* Support for random number generators that support independent streams and
23+
jumping ahead so that substreams can be generated
24+
* Faster ranomd number generations, especially for Normals using the Ziggurat
25+
method
26+
27+
```python
28+
import randomstate as rnd
29+
w = rnd.standard_normal(10000, method='zig')
30+
```
31+
32+
## Included Pseudo Random Number Generators
33+
34+
This modules includes a number of alternative random
735
number generators in addition to the MT19937 that is included in NumPy.
836
The RNGs include:
937

@@ -17,11 +45,23 @@ version of the MT19937 generator that is especially fast at generating doubles
1745
* [MRG32K3A](http://simul.iro.umontreal.ca/rng)
1846
* A multiplicative lagged fibonacci generator (LFG(31, 1279, 861, *))
1947

20-
## Rationale
21-
The main reason for this project is to include other PRNGs that support
22-
important features when working in parallel such as the ability to produce
23-
multiple independent streams, to quickly advance the generator, or to jump
24-
ahead.
48+
## Differences from `numpy.random.RandomState`
49+
50+
### New Features
51+
* `stanard_normal`, `normal`, `randn` and `multivariate_normal` all support
52+
an additional `method` keyword argument which can be `inv` or `zig` where
53+
`inv` corresponds to the current method and `zig` uses tha much faster
54+
(100%+) ziggurat method.
55+
56+
### New Functions
57+
58+
* `random_entropy` - Read from the system entropy provider, which is commonly
59+
used in cryptographic applications
60+
* `random_uintegers` - unsigned integers `[0, 2**64-1]`
61+
* `jump` - Jumps RNGs that support it. `jump` moves the state a great
62+
distance. _Only available if supported by the RNG._
63+
* `advance` - Advanced the core RNG 'as-if' a number of draws were made,
64+
without actually drawing the numbers. _Only available if supported by the RNG._
2565

2666
## Status
2767

@@ -33,15 +73,14 @@ identical sequence of random numbers for a given seed.
3373
* PC-BSD (FreeBSD) 64-bit, Python 2.7
3474
* OSX 64-bit, Python 2.7
3575
* Windows 32/64 bit (only tested on Python 2.7 and 3.5, but should work on 3.3/3.4)
36-
* There is no documentation for the core RNGs.
3776

3877
## Documentation
3978

40-
A occasionally update build of the documentation is available on
79+
A occasionally updated build of the documentation is available on
4180
[my github pages](http://bashtage.github.io/ng-numpy-randomstate/).
4281

4382
## Plans
44-
It is essentially complete. There are a few rough edges that need to be smoothed.
83+
This module is essentially complete. There are a few rough edges that need to be smoothed.
4584

4685
* Stream support for MLFG and MRG32K3A
4786
* Creation of additional streams from a RandomState where supported (i.e.
@@ -71,15 +110,11 @@ implementation for identical results. It also passes NumPy's test suite.
71110
python setup.py install
72111
```
73112

74-
## Building for Testing Purposes
75-
76-
This command will build a single module containining xorshift128 called
77-
`interface`.
78-
79-
```bash
80-
cd randomstate
81-
python setup-basic.py build_ext --inplace
82-
```
113+
### Windows
114+
Either use a binary installer or if building from scratch using Python 3.5 and
115+
the free Visual Studio 2015 Community Edition. It can also be build using
116+
Microsoft Visual C++ Compiler for Python 2.7 and Python 2.7, although some
117+
modifications are needed to distutils to find the compiler.
83118

84119
## Using
85120

@@ -99,7 +134,7 @@ rs.random_sample(100)
99134
```
100135

101136
Like NumPy, `randomstate` also exposes a single instance of the `mt19937`
102-
generator directly at the moduel level so that commands like
137+
generator directly at the module level so that commands like
103138

104139
```python
105140
import randomstate
@@ -109,70 +144,32 @@ randomstate.exponential(1.0, 1.0, size=10)
109144

110145
will work.
111146

112-
If you use `setup-basic.py`,
113-
114-
```python
115-
import interface
116-
117-
rs = interface.RandomState()
118-
rs.random_sample(100)
119-
```
120-
121147
## License
122148
Standard NCSA, plus sub licenses for components.
123149

124150
## Performance
125151
Performance is promising, and even the mt19937 seems to be faster than NumPy's mt19937.
126152

127153
```
128-
Time to produce 1,000,000 Standard normals
154+
Speed-up relative to NumPy (Slow Normals)
129155
************************************************************
130-
numpy-random-standard_normal 58.34 ms
131-
randomstate.prng-mlfg_1279_861-standard_normal 46.20 ms
132-
randomstate.prng-mrg32k3a-standard_normal 75.95 ms
133-
randomstate.prng-mt19937-standard_normal 52.68 ms
134-
randomstate.prng-pcg32-standard_normal 48.38 ms
135-
randomstate.prng-pcg64-standard_normal 46.27 ms
136-
randomstate.prng-xorshift1024-standard_normal 45.53 ms
137-
randomstate.prng-xorshift128-standard_normal 45.57 ms
138-
139-
Standard normals per second
156+
randomstate.prng-dsfmt-standard_normal 107.2%
157+
randomstate.prng-mlfg_1279_861-standard_normal 51.2%
158+
randomstate.prng-mrg32k3a-standard_normal -11.8%
159+
randomstate.prng-mt19937-standard_normal 44.0%
160+
randomstate.prng-pcg32-standard_normal 51.2%
161+
randomstate.prng-pcg64-standard_normal 51.1%
162+
randomstate.prng-xorshift1024-standard_normal 50.5%
163+
randomstate.prng-xorshift128-standard_normal 52.1%
164+
165+
Speed-up relative to NumPy (Ziggural Normals)
140166
************************************************************
141-
numpy-random-standard_normal 17.14 million
142-
randomstate.prng-mlfg_1279_861-standard_normal 21.65 million
143-
randomstate.prng-mrg32k3a-standard_normal 13.17 million
144-
randomstate.prng-mt19937-standard_normal 18.98 million
145-
randomstate.prng-pcg32-standard_normal 20.67 million
146-
randomstate.prng-pcg64-standard_normal 21.61 million
147-
randomstate.prng-xorshift1024-standard_normal 21.96 million
148-
randomstate.prng-xorshift128-standard_normal 21.94 million
149-
150-
Speed-up relative to NumPy
151-
************************************************************
152-
randomstate.prng-mlfg_1279_861-standard_normal 26.3%
153-
randomstate.prng-mrg32k3a-standard_normal -23.2%
154-
randomstate.prng-mt19937-standard_normal 10.8%
155-
randomstate.prng-pcg32-standard_normal 20.6%
156-
randomstate.prng-pcg64-standard_normal 26.1%
157-
randomstate.prng-xorshift1024-standard_normal 28.1%
158-
randomstate.prng-xorshift128-standard_normal 28.0%
159-
160-
--------------------------------------------------------------------------------
167+
randomstate.prng-dsfmt-standard_normal 283.7%
168+
randomstate.prng-mlfg_1279_861-standard_normal 217.4%
169+
randomstate.prng-mrg32k3a-standard_normal 16.6%
170+
randomstate.prng-mt19937-standard_normal 201.3%
171+
randomstate.prng-pcg32-standard_normal 274.9%
172+
randomstate.prng-pcg64-standard_normal 310.8%
173+
randomstate.prng-xorshift1024-standard_normal 336.3%
174+
randomstate.prng-xorshift128-standard_normal 425.1%
161175
```
162-
163-
## Differences from `numpy.random.RandomState`
164-
165-
### New Features
166-
* `stanard_normal` and `normal` support an additional `method` keyword
167-
argument which can be `inv` or `zig` where `inv` corresponds to the
168-
current method and `zig` uses tha much faster (100%+) ziggurat method.
169-
170-
### New Functions
171-
172-
* `random_entropy` - Read from the system entropy provider, which is commonly
173-
used in cryptographic applications
174-
* `random_uintegers` - unsigned integers `[0, 2**64-1]`
175-
* `jump` - Jumps RNGs that support it. `jump` moves the state a great
176-
distance. _Only available if supported by the RNG._
177-
* `advance` - Advanced the core RNG 'as-if' a number of draws were made,
178-
without actually drawing the numbers. _Only available if supported by the RNG._

0 commit comments

Comments
 (0)