You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从大小为N的NumPy数组中随机抽取大小为M的子样本?

如何从NumPy数组中随机选取M个元素生成子样本?

嘿,这个需求在数据处理里太常见了!NumPy本身就提供了非常简洁的方法来实现,我给你分享两个最常用的方案,不管是一维还是多维数组都能轻松搞定:

方法一:使用np.random.choice(最直接高效)

这个函数就是专门用来从数组里随机选择元素的,灵活性拉满:

一维数组场景

如果你的数组是一维的,直接调用choice就能完成,记得设置replace=False来保证选取的元素不重复(要是允许重复抽取,把这个参数改成True就行):

import numpy as np

# 示例原始数组
original_array = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
M = 3  # 要生成的子样本大小

# 无放回随机选取M个元素
subsample = np.random.choice(original_array, size=M, replace=False)
print(subsample)

多维数组场景

如果是二维数组(比如想按行选取样本),可以先生成随机索引,再用索引提取目标元素:

# 示例二维数组
original_2d = np.array([[1,2,3], [4,5,6], [7,8,9], [10,11,12]])
M = 2  # 要选取2行作为子样本

# 生成随机行索引
random_indices = np.random.choice(original_2d.shape[0], size=M, replace=False)
subsample_2d = original_2d[random_indices]
print(subsample_2d)

方法二:使用np.random.permutation(先打乱再截取)

这个方法的思路是先打乱数组的索引顺序,再截取前M个元素,效果和上面完全一致:

一维数组示例

import numpy as np

original_array = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
M = 3

# 打乱索引后取前M个元素
shuffled_indices = np.random.permutation(len(original_array))
subsample = original_array[shuffled_indices[:M]]
print(subsample)

多维数组按行选取示例

original_2d = np.array([[1,2,3], [4,5,6], [7,8,9], [10,11,12]])
M = 2

# 打乱行索引后截取前M行
shuffled_rows = np.random.permutation(original_2d.shape[0])
subsample_2d = original_2d[shuffled_rows[:M]]
print(subsample_2d)

实用小提示

如果需要每次运行都得到完全相同的子样本(方便调试和结果复现),可以提前设置随机种子:

np.random.seed(42)  # 固定随机种子,确保结果可复现

内容的提问来源于stack exchange,提问作者Giorgi Tsertsvadze

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:19:13