Bird
Raised Fist0
NumPydata~10 mins

np.random.default_rng() modern approach in NumPy - Step-by-Step Execution

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Concept Flow - np.random.default_rng() modern approach
Create Generator with default_rng()
↓
Use Generator methods (e.g., integers, random)
↓
Get random numbers
↓
Use numbers for analysis or simulation
↓
End
Create a random number generator object, then use its methods to get random numbers for your tasks.
Execution Sample
NumPy
import numpy as np
rng = np.random.default_rng()
rands = rng.integers(1, 10, size=5)
print(rands)
This code creates a modern random number generator and prints 5 random integers between 1 and 9.
Execution Table
StepActionEvaluationResult
1Call np.random.default_rng()Create Generator objectrng = Generator instance
2Call rng.integers(1, 10, size=5)Generate 5 random integers from 1 to 9[7 2 5 1 8] (example output)
3Print randsOutput the array[7 2 5 1 8]
4EndNo more actionsExecution stops
💡 Finished generating and printing random integers using the modern Generator.
Variable Tracker
VariableStartAfter Step 1After Step 2After Step 3Final
rngNoneGenerator instanceGenerator instanceGenerator instanceGenerator instance
randsNoneNone[7 2 5 1 8][7 2 5 1 8][7 2 5 1 8]
Key Moments - 2 Insights
Why do we create 'rng' with default_rng() instead of using np.random.randint() directly?
Using default_rng() creates a Generator object that is more flexible and modern. The execution_table step 1 shows this creation, and step 2 uses its method integers() instead of the old global functions.
What does the 'size=5' argument do in rng.integers(1, 10, size=5)?
It tells the generator to produce 5 random numbers. Step 2 in the execution_table shows 5 numbers generated, matching the size argument.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what type of object is 'rng' after step 1?
AA list
BA Generator instance
CAn integer array
DNone
💡 Hint
Check the 'Result' column in step 1 of the execution_table.
At which step does the code generate the random integers?
AStep 2
BStep 1
CStep 3
DStep 4
💡 Hint
Look at the 'Action' column describing rng.integers() in the execution_table.
If we change size=5 to size=3 in rng.integers(), how would the 'rands' variable change in variable_tracker?
AIt would become None
BIt would hold 5 random integers as before
CIt would hold 3 random integers instead of 5
DIt would cause an error
💡 Hint
Refer to the 'rands' row in variable_tracker and the meaning of the size argument in key_moments.
Concept Snapshot
np.random.default_rng() creates a modern random number generator.
Use its methods like integers() to get random numbers.
Specify size to get multiple numbers.
This approach is preferred over old np.random functions.
Example: rng = np.random.default_rng(); rng.integers(1,10,size=5)
Full Transcript
This visual execution shows how to use numpy's modern random number generator with np.random.default_rng(). First, we create a Generator object called rng. Then, we use rng.integers() to generate 5 random integers between 1 and 9. The execution table traces each step: creating the generator, generating numbers, printing them, and ending. The variable tracker shows how rng and the random numbers change during execution. Key moments clarify why we use default_rng() and what the size parameter does. The quiz tests understanding of the generator object, the step generating numbers, and the effect of changing size. The snapshot summarizes the modern approach syntax and usage.

Practice

(1/5)
1. What does np.random.default_rng() do in NumPy?
easy
A. Creates a modern random number generator instance
B. Generates a fixed list of numbers
C. Imports the NumPy library
D. Sorts an array in ascending order

Solution

  1. Step 1: Understand the function purpose

    np.random.default_rng() creates a new random number generator object using the modern Generator API.
  2. Step 2: Compare with other options

    It does not generate fixed lists, import libraries, or sort arrays.
  3. Final Answer:

    Creates a modern random number generator instance -> Option A
  4. Quick Check:

    default_rng() = modern RNG instance [OK]
Hint: Remember default_rng() always creates a new RNG object [OK]
Common Mistakes:
  • Confusing it with random number generation output
  • Thinking it imports NumPy
  • Mixing it up with sorting functions
2. Which of the following is the correct way to create a random number generator with a seed of 42 using np.random.default_rng()?
easy
A. rng = np.random.default_rng(42, seed=42)
B. rng = np.random.default_rng(42)
C. rng = np.random.default_rng().seed(42)
D. rng = np.random.default_rng().random(42)

Solution

  1. Step 1: Check the correct syntax for seeding

    The seed is passed as an argument directly to default_rng(), so np.random.default_rng(42) is correct.
  2. Step 2: Evaluate other options

    rng = np.random.default_rng(42, seed=42) is invalid because it passes seed both positionally and as keyword, causing TypeError: multiple values for 'seed'. rng = np.random.default_rng().seed(42) tries to call seed() method which does not exist on the Generator. rng = np.random.default_rng().random(42) calls random(42) which generates numbers, not seeds.
  3. Final Answer:

    rng = np.random.default_rng(42) -> Option B
  4. Quick Check:

    Seed passed as argument = rng = np.random.default_rng(42) [OK]
Hint: Pass seed directly inside default_rng() parentheses [OK]
Common Mistakes:
  • Passing seed both positionally and as keyword argument
  • Calling seed() method on the generator
  • Confusing random() method with seeding
3. What is the output of this code?
import numpy as np
rng = np.random.default_rng(123)
print(rng.integers(1, 10, size=3))
medium
A. [3 3 7]
B. [3 1 7]
C. [2 3 7]
D. [3 3 6]

Solution

  1. Step 1: Understand the code

    The code creates a random number generator with seed 123, then generates 3 random integers between 1 (inclusive) and 10 (exclusive).
  2. Step 2: Run the code or recall output

    Running this code produces the array [3 3 7].
  3. Final Answer:

    [3 3 7] -> Option A
  4. Quick Check:

    Seed 123 + integers(1,10,3) = [3 3 7] [OK]
Hint: Seed fixes output; integers(1,10,3) gives same 3 numbers [OK]
Common Mistakes:
  • Assuming inclusive upper bound 10
  • Confusing seed effect on output
  • Mixing output with floats instead of integers
4. Identify the error in this code snippet:
import numpy as np
rng = np.random.default_rng()
random_numbers = rng.random(5, seed=10)
print(random_numbers)
medium
A. random() should be called without parentheses
B. default_rng() requires a seed argument
C. random() does not accept a seed argument
D. rng.random() returns integers, not floats

Solution

  1. Step 1: Check method signature of random()

    The random() method of the Generator does not accept a seed parameter; seeding is done when creating the generator.
  2. Step 2: Identify the error

    Passing seed=10 to random() causes a TypeError.
  3. Final Answer:

    random() does not accept a seed argument -> Option C
  4. Quick Check:

    Seed only in default_rng(), not in random() [OK]
Hint: Seed only when creating RNG, not in random() calls [OK]
Common Mistakes:
  • Trying to seed random() method
  • Thinking random() returns integers
  • Believing default_rng() needs seed always
5. You want to generate a reproducible shuffled version of the list [10, 20, 30, 40, 50] using np.random.default_rng(). Which code correctly achieves this?
hard
A. rng = np.random.default_rng(7) arr = [10, 20, 30, 40, 50] rng.shuffle(arr) print(arr)
B. rng = np.random.default_rng() arr = [10, 20, 30, 40, 50] rng.shuffle(arr) print(arr)
C. rng = np.random.default_rng(7) arr = [10, 20, 30, 40, 50] shuffled = np.random.shuffle(arr) print(shuffled)
D. rng = np.random.default_rng(7) arr = [10, 20, 30, 40, 50] shuffled = rng.permutation(arr) print(shuffled)

Solution

  1. Step 1: Understand reproducible shuffling

    To get reproducible shuffling, seed the generator and use its methods. rng.shuffle() shuffles in-place and returns None, while rng.permutation() returns a shuffled copy.
  2. Step 2: Analyze options

    rng = np.random.default_rng(7) arr = [10, 20, 30, 40, 50] rng.shuffle(arr) print(arr) fails because rng.shuffle() requires a NumPy ndarray but arr is a list (TypeError). rng = np.random.default_rng() arr = [10, 20, 30, 40, 50] rng.shuffle(arr) print(arr) has no seed, so not reproducible (also fails on list). rng = np.random.default_rng(7) arr = [10, 20, 30, 40, 50] shuffled = np.random.shuffle(arr) print(shuffled) incorrectly uses np.random.shuffle() which ignores rng, requires ndarray (fails on list), and returns None. rng = np.random.default_rng(7) arr = [10, 20, 30, 40, 50] shuffled = rng.permutation(arr) print(shuffled) seeds and uses permutation() to get a reproducible shuffled copy.
  3. Final Answer:

    rng = np.random.default_rng(7) arr = [10, 20, 30, 40, 50] shuffled = rng.permutation(arr) print(shuffled) -> Option D
  4. Quick Check:

    Seed + permutation() = reproducible shuffled copy [OK]
Hint: Use rng.permutation(arr) with seed for reproducible shuffle [OK]
Common Mistakes:
  • Using np.random.shuffle() ignoring seed
  • Expecting shuffle() to return a new list
  • Not seeding the generator for reproducibility