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

Python中基于拉丁超立方采样(LHS)生成分类变量组合样本

基于拉丁超立方采样生成分类变量组合样本

需求说明

我有3个包含分类值的列表,希望用**拉丁超立方采样(LHS)**生成10组由这三个列表值组合而成的样本数组,无需全因子组合,仅通过LHS随机选取。列表如下:

list_1 = ['a', 'b', 'c', 'd', 'e']
list_2 = [2001, 2002, 2003, 2004]
list_3 = ['red', 'green', 'blue', 'yellow']

期望生成类似如下格式的数组:

array([['a', 2001, 'red'],
       ['b', 2002, 'green'],
       ['c', 2003, 'blue'],
       ...])

实现方案

针对分类变量的拉丁超立方采样,可通过将分类值映射为索引区间,再用LHS采样索引的方式实现。以下是Python代码实现:

代码示例

from scipy.stats import qmc
import numpy as np

# 定义分类列表
list_1 = ['a', 'b', 'c', 'd', 'e']
list_2 = [2001, 2002, 2003, 2004]
list_3 = ['red', 'green', 'blue', 'yellow']

# 获取各列表长度
len1, len2, len3 = len(list_1), len(list_2), len(list_3)

# 初始化3维度拉丁超立方采样器
sampler = qmc.LatinHypercube(d=3)
# 生成10个0-1区间的样本
sample = sampler.random(n=10)

# 将采样值映射为对应列表的索引
idx1 = (sample[:, 0] * len1).astype(int)
idx2 = (sample[:, 1] * len2).astype(int)
idx3 = (sample[:, 2] * len3).astype(int)

# 组合成最终样本数组
result = np.array([
    [list_1[i], list_2[j], list_3[k]]
    for i, j, k in zip(idx1, idx2, idx3)
])

# 输出结果
print("生成的LHS样本数组:")
print(result)

代码说明

  1. 借助scipy.stats.qmc.LatinHypercube生成0-1区间的LHS样本,确保每个维度的采样值均匀覆盖区间,符合拉丁超立方的分层特性。
  2. 将每个维度的采样值乘以对应分类列表的长度,取整后得到分类值的索引,保证每个分类被选中的概率均匀。
  3. 通过列表推导式根据索引取出对应分类值,组合成目标格式的数组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 09:10:56