2026a

# datasample


从数据中随机抽样,有或没有放回

函数库: TyStatistics

# 语法

y,idx = datasample(rng::AbstractRNG,x::AbstractArray,k::Integer,dim::Union{Integer,Nothing}=nothing;replace::Bool=true,weights=Float64[],
)
y,idx = datasample(rng::AbstractRNG,x::AbstractString,k::Integer,dim::Union{Integer,Nothing}=nothing;replace::Bool=true,weights=Float64[],
)

y,idx = datasample(x::Union{AbstractString,AbstractArray},k::Integer,dim::Union{Integer,Nothing}=nothing;replace::Bool=true,weights=Float64[],
)

# 描述

y,idx = datasample(rng::AbstractRNG,x::AbstractArray,k::Integer,dim::Union{Integer,Nothing}=nothing;replace::Bool=true,weights=Float64[]) 返回前面语法中AbstractArray输入参数的样本,以及一个或多个关键字参数指定的附加选项。例如,replace = false 指定不放回采样。示例


y,idx = datasample(rng::AbstractRNG,x::AbstractString,k::Integer,dim::Union{Integer,Nothing}=nothing;replace::Bool=true,weights=Float64[]) 返回前面语法中AbstractString输入参数的样本,以及一个或多个关键字参数指定的附加选项。例如,replace = false 指定不放回采样。示例


y,idx = datasample(x::Union{AbstractString,AbstractArray},k::Integer,dim::Union{Integer,Nothing}=nothing;replace::Bool=true,weights=Float64[]) 返回前面语法中AbstractString或AbstractArray输入参数的样本,以及一个或多个关键字参数指定的附加选项,且利用全局随机种子(这将导致输出无法控制随机流)。例如,replace = false 指定不放回采样。

# 示例

从向量中采样唯一值

为再现性创建随机数流。

using TyMath
using TyStatistics
rng = MT19937ar(5489)

从整数 1 到 10 中抽取五个唯一值。

y, = datasample(rng,1:10,5,replace = false)
y = 5×1 Matrix{Int64}:
  6
  4
  7
  3
 10
指定概率生成随机字符串
using TyMath
using TyStatistics
rng = MT19937ar(5489)

根据指定的概率从序列 ACGT 中生成 48 个随机字符。

seq, = datasample(rng,"ACGT",48,weights = [0.15 0.35 0.35 0.15])
seq = "GTATGACGTTCTTCGACTGTGAGTGGGCGCGACAAGGCTACCGGCCCG"
选择矩阵列的随机子集

为结果的可重复性设置随机种子。

using TyMath
using TyStatistics
rng = MT19937ar(10)

生成具有 10 行和 1000 列的矩阵。

X = randn(rng,10,1000);

创建随机数流以在数据样本中重现。

s = MT19937ar(5489)

从 X 中随机选择五个不同的列。

Y, = datasample(s,X,5,2,replace = false)
Y = 10×5 Matrix{Float64}:
 -1.5193      1.13672   -0.586354   -0.655754   0.391249
  0.692856   -1.03803   -0.684238   -0.792776   0.66517
  1.1872      0.217096   0.980718   -0.848974  -0.232045
  0.139023    2.24161    0.572727    0.425277   1.67601
  0.0601256   0.489191  -2.12821     0.157916  -0.299219
  1.41157    -1.76663   -0.307409   -0.172384  -0.223245
 -1.65982    -1.4411    -1.66551    -0.673025   0.220711
 -0.194504   -0.632623   1.13713    -0.106311   2.44995
 -0.330362   -0.80897   -0.0316812   0.126629   1.09163
 -1.46784     1.00255    1.10987     0.59489   -0.641892
从两个数据向量中并行采样

根据从另一个向量中选择的样本的索引从数据中选择样本。

生成两个随机向量。

using TyMath
using TyStatistics
x1 = randn(100,1);
x2 = randn(100,1);

从向量 x1 中选择 10 个元素的样本,并在向量 idx 中返回样本的索引。

y1,idx = datasample(x1,10);

使用向量 idx 中的索引从向量 x2 中选择 10 个元素的样本。

y2 = x2[idx];

# 输入参数

rng - 随机种子
Global_RNG(默认) | 随机数种子

通过设置rng可控制datasample随机生成结果,不设置则利用全局变量。

x - 输入参数
数组 | 字符串

要从中采样的输入数据,指定为向量、矩阵、多维数组、字符串。默认情况下,datasample 从数据的第一个非单一维度采样。例如,如果 data 是矩阵,则 datasample 从行中采样。使用 dim 输入参数更改此行为。

数据类型: AbstractArray | AbstractString

k - 样本数量
正整数标量

样本数,指定为正整数。

示例: datasample(data,100) 返回从 data 中的数据中均匀随机采样的 100 个观测值。

数据类型: Float32 |Float64 |Int8 |Int16 |Int32 |Int64 |Int128 |UInt8 |UInt16 |UInt32 |UInt64 |UInt128 |Bool

dim - 样本维度
nothing (default) | 正整数

要采样的维度,指定为正整数。例如,如果 data 是矩阵且 dim 为 2,则 y 包含 data 中的列选择。如果 data 是表或数据集数组且 dim 为 2,则 y 包含 data 中的变量选择。无论数据是向量、矩阵还是 N 维数组,都可以使用 dim 确保沿特定维度进行采样。

数据类型: Float32 |Float64 |Int8 |Int16 |Int32 |Int64 |Int128 |UInt8 |UInt16 |UInt32 |UInt64 |UInt128 |Bool

# 关键字参数

将关键字参数指定为 Name1=Value1,...,NameN=ValueN,其中 Name 是参数名称,Value 是相应的值。名称-值参数必须出现在其他参数之后,但对的顺序无关紧要。

示例: replace = false,weights = ones(datasize,1) 以与 weights 的元素成比例的概率无放回地采样,其中 datasize 是被采样维度的大小。

replace - 放回抽样指标
true (default) | false

带替换采样的指示符,指定为以逗号分隔的对,其中包含 replace 和 true 或 false。

如果replace为真,则使用替换样本,如果replace为假,则不使用替换样本。如果replace为假,则 k 不得大于被采样维度的大小。例如,如果数据 = [1 3 Inf; 2 4 5] 和 y = datasample(data,k,replace = false),则 k 不能大于 2。

数据类型: Bool

weights - 采样权重
ones(datasize,1) (default) | 非负数值向量

采样权重,指定为以逗号分隔的对组,其中包含 weights 和一个非负数值向量。向量的大小为 datasize,其中 datasize 是被采样维度的大小。向量必须至少有一个正值并且不能包含 NaN 值。 datasample 函数样本的概率与weights的元素成正比。

示例:weights = [0.1,0.5,0.35,0.46]

# 输出参数

y - 样本
数组 | 字符串

样本,以向量、矩阵、多维数组、表或数据集数组形式返回。

  • 如果数据是向量,则 y 是包含从数据中选择的 k 个元素的向量;

  • 如果数据是矩阵且 dim = 1,则 y 是包含从数据中选择的 k 行的矩阵。或者,如果 dim = 2,则 y 是包含从数据中选择的 k 列的矩阵;

  • 如果数据是 N 维数组并且 dim = 1,则 y 是沿数据的第一个非单一维度获取的样本的 N 维数组。或者,如果您为 dim 名称-值对组参数指定一个值,datasample 将沿维度 dim 采样;

  • 如果数据是一个表并且 dim = 1,则 y 是一个包含从数据中选择的 k 行的表。或者,如果 dim = 2,则 y 是包含从数据中选择的 k 个变量的表;

  • 如果 data 是一个数据集数组并且 dim = 1,则 y 是一个包含从数据中选择的 k 行的数据集数组。或者,如果 dim = 2,则 y 是包含从数据中选择的 k 个变量的数据集数组。

如果输入数据包含以 NaN 值表示的缺失观测值,则数据样本会从整个输入中采样,包括 NaN 值。例如,y = datasample([NaN 6 14],2) 可以返回 y = NaN 14。

当样本被替换(默认)时,y 可以包含来自数据的重复观察。将 replace name-value 参数设置为 false 以在不替换的情况下进行采样。

idx — 索引
向量

索引,以向量形式返回,指示 datasample 从数据中选择哪些元素来创建 y。 例如:

  • 如果数据是向量,则 y = data[idx];

  • 如果数据是矩阵且 dim = 1,则 y = data[idx,:];

  • 如果数据是矩阵且 dim = 2,则 y = data[:,idx]。

# 提示

要从一个范围内替换随机整数,请使用 randi。

要在不放回的情况下对随机整数进行采样,请使用 randperm 或 datasample。

要从数据中随机采样,有或没有替换,请使用 datasample。

# 替代功能

可以使用 randi 或 randperm 分别为使用或不使用替换的随机抽样生成索引。 但是,datasample 使用起来更方便,因为它直接从您的数据中采样。 datasample 还允许加权采样。

# 参考文献

[1] Wong, C. K. and M. C. Easton. "An Efficient Method for Weighted Sampling Without Replacement." SIAM Journal of Computing 9(1), pp. 111–113, 1980.

# 另请参阅

rand | randi | randperm