[Numpy-discussion] numarray.random_array number generation in C code
Faheem Mitha
faheem at email.unc.edu
Fri Oct 1 22:28:41 CDT 2004
Dear People,
I want to write some C++ code to link with Python, using the
Boost.Python interface. I need to generate random numbers in the C++
code, and I was wondering as to the best way of doing this.
Note that it is important that the random number generation interoperate
seamlessly with Python, in the sense that the behavior of the calls to
the RNG is the same whether calls are made at the C level or the Python
level. I hope the reasons why this is important are obvious.
I was thinking that the method should go like this.
1) When C/C++ code called, reads seed from python random state.
2) Does its stuff.
3) Writes seed back to python level when it exits.
After doing a little investigation of the numarray.random_array python
library and associated extension modules, it seems possible that the
answer is simpler than I had supposed. However, I would appreciate it if
someone would tell me if my understanding is incorrect in some places.
Summary: It seems that I can just call all the C entry point routines
defined in ranlib.h, without worrying about getting or setting seeds.
Rationale:
The structure of this random number facility has three parts, all files in
Packages/RandomArray2/Src.
1) low-level C routines: Packages/RandomArray2/Src/com.c and
Packages/RandomArray2/Src/ranlib.c.
com.c: basic RNG stuff; getting and setting seeds etc.
ranlib.c: Random number generator algorithms for different distributions
etc.
2) Python to C interface: Packages/RandomArray2/Src/ranlibmodule.c.
This interfaces the stuff in com.c and ranlib.c.
3) Python wrapper: Packages/RandomArray2/Lib/RandomArray2.py.
This wraps the C interface. In most cases it does not do much else besides
some basic argument error checking.
More information about the Numpy-discussion
mailing list