Implementation and Principle Analysis of Random Row Sampling from 2D Arrays in NumPy

Nov 22, 2025 · Programming · 11 views · 7.8

Keywords: NumPy | Random Sampling | 2D Arrays | Sampling Without Replacement | Data Science

Abstract: This paper comprehensively examines methods for randomly sampling specified numbers of rows from large 2D arrays using NumPy. It begins with basic implementations based on np.random.randint, then focuses on the application of np.random.choice function for sampling without replacement. Through comparative analysis of implementation principles and performance differences, combined with specific code examples, it deeply explores parameter configuration, boundary condition handling, and compatibility issues across different NumPy versions. The paper also discusses random number generator selection strategies and practical application scenarios in data processing, providing reliable technical references for scientific computing and data analysis.

Introduction

In data science and machine learning fields, random sampling from large datasets for analysis is a common requirement. NumPy, as Python's most important scientific computing library, provides multiple efficient random sampling methods. Based on practical application scenarios, this paper deeply explores the technical implementation of random row sampling from 2D arrays.

Basic Implementation Methods

Using the np.random.randint function enables quick implementation of random row sampling. The core idea of this method is to generate random indices and then access corresponding row data through indexing.

Example code:

>>> import numpy as np
>>> A = np.random.randint(5, size=(10,3))
>>> A
array([[1, 3, 0],
       [3, 2, 0],
       [0, 2, 1],
       [1, 1, 4],
       [3, 2, 2],
       [0, 1, 0],
       [1, 3, 1],
       [0, 4, 1],
       [2, 4, 2],
       [3, 3, 1]])
>>> idx = np.random.randint(10, size=2)
>>> idx
array([7, 6])
>>> A[idx,:]
array([[0, 4, 1],
       [1, 3, 1]])

The general implementation of this method is:

A[np.random.randint(A.shape[0], size=2), :]

Sampling Without Replacement Implementation

In practical applications, sampling without replacement is often required, ensuring that sampled rows are not duplicated. NumPy version 1.7.0 and above provides the np.random.choice function, which implements sampling without replacement by setting the replace=False parameter.

Implementation code:

A[np.random.choice(A.shape[0], 2, replace=False), :]

Detailed parameter description of np.random.choice function:

Function Principle Analysis

The np.random.choice function implements efficient random sampling algorithms at the底层 level. When replace=False, the function uses a variant of the Fisher-Yates shuffle algorithm, ensuring each sample is selected only once. This algorithm has a time complexity of O(k), where k is the number of samples, providing significant advantages when processing large arrays.

For versions before NumPy 1.7.0, sampling without replacement can be implemented through custom functions:

def sample_without_replacement(arr, n_samples):
    indices = np.arange(arr.shape[0])
    selected_indices = []
    for _ in range(n_samples):
        if len(indices) == 0:
            break
        idx = np.random.randint(len(indices))
        selected_indices.append(indices[idx])
        indices = np.delete(indices, idx)
    return arr[selected_indices]

Performance Comparison and Optimization

In practical testing, the sampling without replacement version of np.random.choice demonstrates better performance than simple implementations based on np.random.randint. Particularly when processing large arrays, the optimized algorithms of built-in functions significantly reduce memory usage and computation time.

Performance optimization suggestions:

Application Scenarios and Considerations

Random row sampling has wide applications in multiple domains:

Considerations during usage:

Conclusion

NumPy provides multiple methods for randomly sampling rows from 2D arrays, allowing developers to choose appropriate technical solutions based on specific requirements. The np.random.choice function performs excellently in sampling without replacement scenarios and is the preferred solution when processing large datasets. With NumPy version updates, it is recommended to use new random number generator interfaces for better performance and random number quality.

Copyright Notice: All rights in this article are reserved by the operators of DevGex. Reasonable sharing and citation are welcome; any reproduction, excerpting, or re-publication without prior permission is prohibited.