Setting random seed for reproducibility in NumPy - Time & Space Complexity
Start learning this pattern below
Jump into concepts and practice - no test required
We want to understand how setting a random seed affects the time it takes to generate random numbers.
Does fixing the seed change how long the code runs as we ask for more random numbers?
Analyze the time complexity of the following code snippet.
import numpy as np
np.random.seed(42)
random_numbers = np.random.rand(1000)
This code sets a fixed seed for the random number generator and then creates 1000 random numbers.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Generating each random number in the array.
- How many times: Once for each of the 1000 numbers requested.
As we ask for more random numbers, the time to generate them grows roughly in direct proportion.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | About 10 random number generations |
| 100 | About 100 random number generations |
| 1000 | About 1000 random number generations |
Pattern observation: Doubling the number of random numbers roughly doubles the work done.
Time Complexity: O(n)
This means the time to generate random numbers grows linearly with how many numbers you want.
[X] Wrong: "Setting the random seed makes generating random numbers faster or slower."
[OK] Correct: Setting the seed only fixes the sequence of numbers, it does not change how many operations are needed to generate them.
Understanding how random number generation scales helps you explain performance when working with simulations or data sampling.
"What if we generate random numbers in a loop instead of all at once? How would the time complexity change?"
Practice
numpy?Solution
Step 1: Understand what a random seed does
Setting a random seed fixes the starting point for random number generation.Step 2: Effect of fixed seed on results
This means the same sequence of random numbers is produced every time the code runs.Final Answer:
To make random number results repeatable -> Option DQuick Check:
Random seed = repeatable results [OK]
- Thinking seed speeds up random generation
- Believing seed changes number range
- Assuming seed makes numbers positive only
numpy?Solution
Step 1: Recall the correct function name and usage
The correct function to set seed in numpy isnp.random.seed().Step 2: Check the argument and syntax
The seed value is passed as an integer inside the parentheses, likenp.random.seed(42).Final Answer:
np.random.seed(42) -> Option AQuick Check:
Correct function call = np.random.seed(42) [OK]
- Swapping function and module names
- Using incorrect function like set_seed
- Assigning seed instead of calling function
import numpy as np np.random.seed(0) print(np.random.randint(1, 10)) np.random.seed(0) print(np.random.randint(1, 10))
Solution
Step 1: Understand effect of setting seed before each random call
Setting the seed to 0 resets the random number generator to the same start point.Step 2: Predict output of np.random.randint(1, 10) after resetting seed
Both calls produce the same random integer because the seed is reset before each call.Final Answer:
5 followed by 5 -> Option CQuick Check:
Same seed = same random number [OK]
- Assuming different numbers after resetting seed
- Thinking repeated seed causes error
- Ignoring seed reset effect
import numpy as np np.random.seed = 123 print(np.random.rand())
Solution
Step 1: Check how seed is set
The code assigns 123 tonp.random.seedinstead of calling it as a function.Step 2: Understand consequence of assignment
This overwrites the seed function with an integer, causing errors on later random calls.Final Answer:
Seed is assigned instead of called as a function -> Option BQuick Check:
Use np.random.seed(123), not assignment [OK]
- Assigning seed instead of calling
- Using wrong random function
- Ignoring import statement
numpy. Which code snippet achieves this correctly?Solution
Step 1: Set the random seed correctly
Usenp.random.seed(7)to fix the random sequence.Step 2: Generate 3 random floats between 0 and 1
np.random.rand(3)creates an array of 3 floats in [0,1).Final Answer:
np.random.seed(7) arr = np.random.rand(3) print(arr) -> Option AQuick Check:
Correct seed + rand(3) = reproducible floats [OK]
- Assigning seed instead of calling
- Using non-existent set_seed function
- Using randint instead of rand for floats
