Modern Random Generators Practice Problem
This data science coding problem helps you practice Random Sampling & Generators, modern random generators, and implementation skills. Read the problem statement, write your solution, and strengthen your understanding of Random Sampling & Generators.
- Problem ID: 112
- Problem key: 112-modern-random-generators
- URL: https://datacrack.app/solve/112-modern-random-generators
- Difficulty: easy
- Topic: Random Sampling & Generators
- Module: NumPy Foundations
Problem Statement
# 🧩 Modern Random Generators
---
### 🎯 Goal
In the previous lessons, we used `np.random.seed()`, which modifies a **global** random state. That works for small examples, but it can become messy in larger projects because different parts of the program share the same random generator.
`np.random.default_rng()` creates an independent `Generator` object, which is the recommended modern NumPy API for random numbers.
---
### 🔍 Modern Generator API
```python
rng = np.random.default_rng(42) # independent generator
floats = rng.random(5) # modern version of np.random.random()
ints = rng.integers(0, 10, 5) # modern version of np.random.randint()
```
---
### 💻 Task
Implement `modern_random(seed, size)` that initializes a `Generator` using `default_rng` and generates `size` random floats.
---
### 📥 Input
- `seed`: int — random seed
- `size`: int — number of random floats to generate
### 📤 Output
- List of random floats.
---
### 🧩 Starter Code
```python
import numpy as np
def modern_random(seed, size):
"""
Generate random floats using the modern default_rng API.
"""
# 🧠 TODO: Create a random generator instance with default_rng(seed)
# 🧠 TODO: Use the generator's .random() method
# 🧠 TODO: Return as a list
pass
```
---
### 💡 Expected Output
```python
modern_random(42, 3)
# Expected: [0.7739560485559633, 0.4388784397520523, 0.8585979199113825]
```
---
### 🔑 Key Concepts
- `np.random.default_rng(seed)` creates an independent `Generator`
- `rng.random(size)` generates random floats in `[0, 1)`
- `rng.integers(low, high, size)` replaces the older `np.random.randint`
- Prefer `default_rng()` for new NumPy code because it avoids relying on one shared global random state
Starter Code
import numpy as np
def modern_random(seed, size):
"""
Generate random floats using the modern default_rng API.
"""
# 🧠 TODO: Create a random generator instance with default_rng(seed)
# 🧠 TODO: Use the generator's .random() method
# 🧠 TODO: Return as a list
pass