w3resource

Mastering np.random.choice for Random Selection


Comprehensive Guide to np.random.choice in Python

np.random.choice is a versatile NumPy function used to generate random samples from a given array or range. It allows sampling with or without replacement and supports custom probabilities for elements. This function is ideal for simulations, random sampling, and probabilistic modeling.


Syntax:

numpy.random.choice(a, size=None, replace=True, p=None)

Parameters:

  • a (array-like or int):
    The source of elements to sample from. If a is an integer, sampling occurs from np.arange(a).
  • size (int or tuple of ints, optional):
    Specifies the output shape. If None, a single value is returned.
  • replace (bool, optional):
    If True, sampling is with replacement (elements can be selected multiple times). Default is True.
  • p (1-D array-like, optional):
    Probabilities associated with each element in a. If not specified, the distribution is uniform.

Returns:

  • samples (ndarray or scalar):
    Randomly selected values from a based on the specified parameters.

Examples:

Example 1: Random Sampling from a 1D Array

Code:

import numpy as np

# Define a source array
array = np.array([10, 20, 30, 40, 50])

# Randomly select one element
random_element = np.random.choice(array)

# Print the selected element
print("Randomly selected element:", random_element)

Output:

Randomly selected element: 50

Explanation:

    This randomly selects a single element from the array. Since size is not specified, the output is a scalar.


Example 2: Generate Multiple Random Samples

Code:

import numpy as np

# Define a source array
array = np.array([10, 20, 30, 40, 50])

# Select 3 random elements with replacement
random_samples = np.random.choice(array, size=3)

# Print the selected samples
print("Randomly selected elements:", random_samples)

Output:

Randomly selected elements: [20 40 40]

Explanation

This example generates three random samples from the array, allowing repeated elements (replacement).


Example 3: Sampling Without Replacement

Code:

import numpy as np

# Define a source array
array = np.array([1, 2, 3, 4, 5])

# Select 3 unique elements without replacement
unique_samples = np.random.choice(array, size=3, replace=False)

# Print the selected samples
print("Unique samples:", unique_samples)

Output:

Unique samples: [5 2 1]

Explanation:

    Setting replace=False ensures that each sampled element is unique, making it suitable for creating subsets.


Example 4: Sampling with Probabilities

Code:

import numpy as np

# Define a source array
array = np.array(['A', 'B', 'C', 'D'])

# Define custom probabilities
probabilities = [0.1, 0.2, 0.5, 0.2]

# Select one element based on probabilities
weighted_sample = np.random.choice(array, p=probabilities)

# Print the result
print("Weighted sample:", weighted_sample)

Output:

Weighted sample: A

Explanation:

Custom probabilities ensure that elements are selected based on their defined likelihoods.


Example 5: Generate a 2D Array of Samples

Code:

import numpy as np

# Define a source array
array = np.array([1, 2, 3, 4])

# Generate a 2x3 array of random samples
random_matrix = np.random.choice(array, size=(2, 3))

# Print the matrix
print("2x3 array of random samples:\n", random_matrix)

Output:

2x3 array of random samples:
 [[2 1 4]
 [2 4 4]]

Explanation:

The size parameter accepts tuples to create multidimensional arrays of random samples.


Additional Notes:

    1. Performance: The function is optimized for efficient sampling, even for large arrays.

    2. Applications: Useful for data splitting, simulations, and creating randomized experiments.

    3. Edge Cases: Ensure that p sums to 1, and the size doesn’t exceed the number of elements in a when replace=False.

Practical Guides to NumPy Snippets and Examples.



Follow us on Facebook and Twitter for latest update.