I have a rather big program, where I use functions from the random
module in different files. I would like to be able to set the random seed once, at one place, to make the program always return the same results. Can that even be achieved in python
?
相关问题
- how to define constructor for Python's new Nam
- streaming md5sum of contents of a large remote tar
- How to get the background from multiple images by
- Evil ctypes hack in python
- Correctly parse PDF paragraphs with Python
zss's comment should be highlighted as an actual answer:
In the beginning of your application call
random.seed(x)
making sure x is always the same. This will ensure the sequence of pseudo random numbers will be the same during each run of the application.Jon Clements pretty much answers my question. However it wasn't the real problem: It turns out, that the reason for my code's randomness was the numpy.linalg SVD because it does not always produce the same results for badly conditioned matrices !!
So be sure to check for that in your code, if you have the same problems!
The main python module that is run should
import random
and callrandom.seed(n)
- this is shared between all other imports ofrandom
as long as somewhere else doesn't reset the seed.You can guarantee this pretty easily by using your own random number generator.
Just pick three largish primes (assuming this isn't a cryptography application), and plug them into a, b and c: a = ((a * b) % c) This gives a feedback system that produces pretty random data. Note that not all primes work equally well, but if you're just doing a simulation, it shouldn't matter - all you really need for most simulations is a jumble of numbers with a pattern (pseudo-random, remember) complex enough that it doesn't match up in some way with your application.
Knuth talks about this.