Python随机抽样实战:random.choices()与random.sample()的深度对比与应用场景解析

Python random模块深度解析:从伪随机原理到实战应用与安全优化 伪随机数生成是计算机科学中的基础概念,它通过确定性算法模拟随机过程,为模拟、游戏、机器学习等场景提供可控的随机性。其核心原理基于种子和数学公式,如梅森旋转算法,生成看似随机但可复现的序列。在工程实践中,理解伪随机数的特性至关重要,它既能确保调试和测试的可重复性,又需警惕其在安全场景的局限性。Python的random模块提供了丰富的函数,如randint、choice、shuffle和sample,覆盖从均匀分布到高斯分布等多种需求。通过掌握种子控制、序列操作和分布生成,开发者可以高效实现数据抽样、蒙特卡洛 阅读详情

1. 从“抓阄”到“抽奖”:理解Python随机抽样的本质

咱们程序员写代码,有时候会遇到一些需要“碰运气”的场景。比如,你要从100个用户里随机选10个发优惠券,或者开发一个抽奖小程序,从报名者里抽出幸运儿。这种“随机选几个”的操作,在Python里有个专门的术语,叫随机抽样。

Python内置的random模块就是干这个的,它就像你代码里的一个“骰子”或者“抽签筒”。今天咱们要掰开揉碎了聊的,就是random模块里两个长得像、但脾气完全不同的函数:random.choices()和random.sample()。我刚开始用的时候也犯过迷糊,觉得不都是随机选吗,有啥区别?结果在实际项目里用错了,闹出过“一个人中两次奖”的笑话,这才让我下定决心把它们的底细摸清楚。

简单来说,你可以这样理解它们的核心区别:random.sample()像是“抓阄”,从一堆人里抓出几个,保证每个人最多被抓到一次,绝不重复。而random.choices()更像是“摇奖”或者“抽签后放回”,这次抽到的人,下次还有可能被抽到。这个根本性的差异,直接决定了它们在不同的业务场景下谁更合适。接下来,咱们就抛开那些枯燥的官方文档,用大白话和实际代码,把这两个函数里里外外讲明白。

2. 绝不重复的“抓阄”:random.sample()深度解析

2.1 基本语法与核心行为

咱们先看random.sample()。它的语法简单得不能再简单:

import random

result = random.sample(population, k)

这里有两个关键参数:

  • population:你的“抽签筒”,也就是数据源。它可以是列表(list)、元组(tuple)、字符串(str),甚至是集合(set)。只要是Python里那种能一个个数出来的“序列”或者“集合”都行。
  • k:你想从筒子里抓出几个“阄”。这里有个铁律:k的值必须小于等于population的长度。 你想啊,一个只有5个人的小组,你非要抓6个不重复的人出来,这怎么可能呢?Python会直接给你抛一个ValueError错误。

这个函数最核心、最不容置疑的行为就是:它返回的列表里,绝对不会有重复的元素。这是由它的底层算法保证的,你可以放一百个心。

2.2 实战场景与代码示例

光说不练假把式,我直接上几个我项目中用到的真实例子。

场景一:随机分配任务 假设你是一个小组长,手头有8个开发任务(tasks),要公平地分给3个组员。用sample就特别合适:

import random

all_tasks = ['设计数据库', '编写API接口', '开发前端页面', '撰写测试用例',
             '部署到服务器', '性能优化', '编写文档', '代码审查']
assigned_tasks = random.sample(all_tasks, 3)

print(f"随机分配到的任务是:{assigned_tasks}")
# 可能的输出:['编写API接口', '性能优化', '代码审查']
# 注意:输出里的三个任务肯定都不一样。

场景二:从用户池中抽取幸运用户 这是电商活动里最常见的场景。你有10000个用户的ID列表,要从中抽取10个免单幸运儿。

user_ids = list(range(10000))  # 假设是0到9999的用户ID
winners = random.sample(user_ids, 10)

print(f"恭喜以下用户ID中奖:{winners}")
# 输出类似:[4832, 152, 7719, 2345, 8, 6666, 421, 8888, 12, 999]
# 关键:这10个ID保证是独一无二的,同一个人不可能中奖两次。

场景三:生成随机验证码或密码 虽然这个场景有更专业的模块(如secrets),但用sample理解原理很好。比如从一个字符池里抽取6位作为验证码:

import string

char_pool = string.ascii_letters + string.digits  # 所有字母和数字
captcha = ''.join(random.sample(char_pool, 6))

print(f"您的验证码是:{captcha}")
# 输出类似:"aB3fG9"
# 因为是不重复抽样,所以这个6位验证码里每个字符都不同。

2.3 你必须绕开的“坑”

我用sample踩过最大的一个坑,就是对k参数的长度检查掉以轻心。有一次,我的数据源population是一个根据条件动态过滤出来的列表,有时可能过滤完就剩1个元素了。但我的代码里k还是固定写了2,结果程序运行时突然就崩溃了,报错ValueError: Sample larger than population。所以,在使用sample前,务必加一个判断:

data_source = [...]  # 你的数据,可能是动态变化的
k = 5

if k <= len(data_source):
    result = random.sample(data_source, k)
else:
    # 处理异常情况:比如用所有数据,或者报个友好的提示
    result = data_source  # 或者 raise 一个自定义异常
    print("数据量不足,无法抽取指定数量的样本")

另一个小提示是关于随机种子(seed)。如果你希望每次运行程序,抽到的结果都一样(比如为了复现某个随机实验),可以在程序开头设置一下:

random.seed(42)  # 种子值可以是任意整数,比如著名的“42”
result = random.sample([1, 2, 3, 4, 5], 2)
# 只要种子是42,无论何时运行,result永远会是[1, 3](或其他固定组合)

3. 允许重复的“摇奖”:random.choices()深度解析

3.1 基本语法与核心行为

现在来看random.choices(),它的玩法就丰富多了。语法长这样:

import random

result = random.choices(population, weights=None, cum_weights=None, k=1)

参数多了,也更强大了:

  • population:同样是数据源。
  • k:要抽取的次数。注意!这里k可以大于population的长度。 因为它是“抽了放回”的模式。
  • weights:权重参数,这是choices的灵魂所在。 它是一个列表,长度必须和population一样,用来指定每个元素被抽中的“概率权重”。
  • cum_weights:累积权重,是weights的另一种形式,用的少一些,咱们后面细说。

choices最核心的行为是:每次抽取都是独立的,并且会考虑权重。因此,结果列表中完全可能出现重复的元素。

3.2 权重系统:让随机变得“不公平”

weights参数让choices变得异常强大。我举个例子你就明白了:公司年会抽奖,普通员工、经理、总监的中奖概率能一样吗?显然不能。这时候weights就派上用场了。

场景一:加权抽奖 假设有三种奖品:手机(概率10%)、耳机(概率30%)、谢谢参与(概率60%)。

prizes = ['手机', '耳机', '谢谢参与']
# 权重列表,顺序与prizes一一对应
probabilities = [1, 3, 6]  # 比例是1:3:6,总和是10
# 你也可以用小数:[0.1, 0.3, 0.6],效果一样

# 模拟抽取10次
draw_results = random.choices(prizes, weights=probabilities, k=10)
print(f"10次抽奖结果:{draw_results}")
# 输出可能为:['谢谢参与', '耳机', '谢谢参与', '谢谢参与', '手机', '谢谢参与', '耳机', '谢谢参与', '谢谢参与', '耳机']
# 看,“谢谢参与”出现得最多,“手机”可能一次都抽不到,这很符合设定的概率。

场景二:根据热度推荐内容 做内容平台时,我们想让热门文章有更高几率被随机推荐给新用户,但又不至于完全屏蔽冷门文章。

articles = ['文章A', '文章B', '文章C', '文章D']
# 假设它们的阅读量分别是 1000, 500, 200, 50
read_counts = [1000, 500, 200, 50]

# 直接用阅读量作为权重
recommendation = random.choices(articles, weights=read_counts, k=2)
print(f"为您随机推荐:{recommendation}")
# 大概率会推荐到“文章A”和“文章B”,“文章D”被推荐的概率很低但存在可能。

关于cum_weights(累积权重):它是weights的另一种表达方式。比如weights=[1,3,6],对应的cum_weights就是[1, 4, 10](1, 1+3, 1+3+6)。choices函数内部其实是用累积权重来计算的,直接提供cum_weights可以稍微提升一点点性能,但大多数时候我们用weights更直观。

3.3 一个函数,两种模式:带权重 vs 等概率

如果不提供weights参数,choices就会退化成等概率随机选择,但依然允许重复。这是它和sample在无权重模式下最大的不同。

colors = ['红', '蓝', '绿']

# 用choices,等概率,抽5次
result_choices = random.choices(colors, k=5)
print(f"choices结果(可能重复): {result_choices}")
# 输出可能:['红', '蓝', '红', '绿', '红']  # 红色重复出现了

# 用sample,等概率,但最多只能抽3次(因为只有3个颜色)
result_sample = random.sample(colors, 3)  # k必须<=3
print(f"sample结果(绝不重复): {result_sample}")
# 输出可能:['绿', '红', '蓝']  # 一定是三个不同的颜色

4. 终极对决:如何根据场景做出正确选择?

讲完了各自的特点,是时候让它们正面PK一下了。我总结了一张核心对比表,你可以贴在墙上:

特性对比random.sample(population, k)random.choices(population, weights, k)
核心机制不放回抽样放回抽样
结果重复性绝不重复允许重复
权重支持不支持支持,通过weights参数
k值限制k <= len(population)k可以是任意正整数
典型应用抽奖(一人一次)、随机分组、洗牌、去重采样加权抽奖、概率模拟、有放回的数据采样、轮盘赌算法
性能考量当k接近population大小时,内部需要打乱更多数据每次选择独立,性能与k线性相关,与总体大小关系不大

4.1 场景决策树:跟着我做选择

面对一个具体需求,你可以跟着下面这个思路走:

  1. 第一问:我允许结果有重复吗?

    • 不允许 -> 直接选 random.sample()。
    • 允许或需要 -> 进入下一问。
  2. 第二问:每个元素被选中的概率需要不同吗?

    • 需要不同的概率/权重 -> 直接选 random.choices(weights=...)。
    • 概率相同 -> 进入最终抉择。
  3. 第三问(概率相同时):我的抽样次数k会超过数据源大小吗?

    • 会超过 -> 你必须用 random.choices(),因为sample会报错。
    • 不会超过 -> 此时两者在结果上等效(都等概率),但sample能保证不重复,通常更符合“抽样”的直觉;choices则可能产生重复。 我个人的习惯是,如果逻辑上“不重复”更合理,即使概率相等也用sample,让代码意图更清晰。

4.2 性能与底层原理浅析

对于大数据量的场景,性能也得考虑。简单来说:

  • random.sample() 内部实现通常采用了一种“部分打乱”或“蓄水池抽样”的算法。当k相对于数据总量很小时,它非常高效,因为它不需要复制或打乱整个庞大的列表。但如果k很大,接近数据总量,它的开销会变大。
  • random.choices() 的实现就是简单地循环k次,每次根据权重随机选一个。它的开销主要取决于k的大小,和数据总量关系不大。

所以,如果你要从一个有一百万个元素的列表中只随机取10个不重复的,sample是绝佳选择。如果你要根据权重从一千个元素里模拟抽取一万次,那choices就更合适。

4.3 高级应用与组合拳

真正的高手,会把它俩组合起来用。分享一个我做过的小工具:实现一个“先加权初筛,再公平终选”的机制。

比如选拔赛:100个候选人,先根据初赛成绩(权重)选出20个入围者(允许某超级选手被多次选中,即权重高),然后再从这20个入围者中公平地(等概率、不重复)选出最后的5个获奖者。

import random

# 所有候选人ID和他们的初赛成绩(作为权重)
candidates = list(range(100))
initial_scores = [random.randint(60, 100) for _ in range(100)]  # 模拟成绩

# 第一步:加权选择,选出20个入围者(允许重复,体现初赛权重)
shortlist = random.choices(candidates, weights=initial_scores, k=20)
print(f"加权初选入围ID(可能有重复): {shortlist}")

# 第二步:从入围者中,去除重复ID,再公平抽取5个最终获奖者
unique_shortlist = list(set(shortlist))  # 去重
final_winners = random.sample(unique_shortlist, min(5, len(unique_shortlist))) # 安全处理
print(f"最终公平选出的获奖者ID: {final_winners}")

这个例子就巧妙结合了choices的“加权”和sample的“不重复公平”特性。

5. 常见误区与最佳实践

最后,聊聊我总结的几个“血泪教训”和推荐做法。

误区一:把choices当sample用,导致数据重复。 这是最常见的错误。特别是在生成测试数据时,比如想随机生成10个用户ID,如果用了choices,可能会生成两个一样的ID,导致后续数据库插入失败或逻辑错误。记住:但凡你的业务逻辑里“重复”是错误或不允许的,第一反应就应该是sample。

误区二:权重列表和人口列表长度对不上。 weights列表的长度必须严格等于population的长度,否则会报错TypeError。写代码时一定要仔细检查。

最佳实践一:明确随机种子的使用场景。

  • 调试和复现BUG时:一定要设random.seed(),让随机过程固定,这样才能稳定地复现问题。
  • 生产环境:通常不设固定种子,让系统时间作为自然种子,保证真正的随机性。Python 3.x版本中,random模块在导入时会自动尝试使用系统提供的随机源进行初始化。

最佳实践二:考虑使用secrets模块进行安全随机。 如果你的随机抽样用于密码、令牌、密钥生成或任何安全相关的场景,请停止使用random模块!Python提供了secrets模块,它使用操作系统提供的密码学安全的随机数生成器。

import secrets
import string

# 生成一个安全的随机密码
alphabet = string.ascii_letters + string.digits
password = ''.join(secrets.choice(alphabet) for i in range(16))  # secrets.choice 类似于等权重的choices
print(f"安全密码: {password}")

secrets模块里也有secrets.SystemRandom类,它提供了sample和choices的安全版本。

最佳实践三:封装自己的抽样函数。 在实际项目中,我习惯把复杂的抽样逻辑封装成一个函数。比如,一个带默认权重且处理边缘情况的加权选择函数:

def weighted_random_select(items, weights=None, k=1, allow_duplicates=True):
    """
    一个增强版的随机选择函数。
    items: 待选列表
    weights: 权重列表,可选
    k: 选取数量
    allow_duplicates: 是否允许重复,默认为True(使用choices)
    """
    if not items:
        return []
    
    if weights is not None and len(weights) != len(items):
        raise ValueError("权重列表长度必须与项目列表长度一致")
    
    if not allow_duplicates:
        # 不允许重复,使用sample
        if k > len(items):
            # 如果想要的数量比总数还多,返回全部(或者你也可以抛异常)
            k = len(items)
        return random.sample(items, k)
    else:
        # 允许重复,使用choices
        return random.choices(items, weights=weights, k=k)

# 使用示例
my_items = ['A', 'B', 'C']
print(weighted_random_select(my_items, k=2, allow_duplicates=False))  # 不重复抽样
print(weighted_random_select(my_items, weights=[5,1,1], k=5, allow_duplicates=True))  # 加权重复抽样

这么一来,团队里的其他同事调用这个函数时,只需要关注业务参数,不用再纠结底层该用sample还是choices了,代码的健壮性和可读性都大大提升。

Python randint()深度解析:原理、陷阱与生产级安全用法 随机数生成是编程基础概念,其核心在于伪随机数生成器(PRNG)的确定性原理与种子机制。Python的randint()函数虽接口简洁,但底层依赖Mersenne Twister算法,具有可复现性、线程共享状态及闭区间语义等关键特性。这些特性在教学演示中无害,却在Docker容器启动、多线程调度、空列表索引、AB测试分组等工程场景中引发ValueError崩溃、流量倾斜或安全漏洞。尤其当用于密码重置、抽奖系统等高敏感场景时,必须切换至secrets模块以保障加密安全性。本文结合17个真实生产案例,系统拆解ra 阅读详情

相关推荐

Python零基础到AI实战:清华课程框架下的600+知识点精讲

Python作为人工智能领域的首选编程语言,因其简洁语法和丰富生态库而备受青睐。其核心原理在于动态类型系统和面向对象编程范式,为机器学习、深度学习等AI技术提供了高效开发基础。在工程实践中,Python通过NumPy、Pandas等库实现数据处理,结合TensorFlow、PyTorch等框架构建AI模型,广泛应用于数据分析、自然语言处理和计算机视觉等场景。本文基于清华大学Python课程体系,系统梳理从环境配置到项目实战的完整学习路径,涵盖面向对象编程、异常处理等600多个关键知识点,帮助零基础学习者快速

weixin_33875564的博客 301

python中random.choice()函数与random.choices()函数

介绍了random.choice()与random.choices()以及他们的区别

QDU_zty的博客 2773

Python基础自测题深度拆解:切片、字典与循环边界全解析

Python是一门语法灵活但细节严谨的动态语言,对切片、字典、循环边界等底层语义的理解,往往决定了代码的健壮性。赋值操作是引用绑定而非复制,左闭右开规则影响序列截取,布尔测试统一作用于所有对象,这些原理是排查隐蔽错误的依据。在代码审查、接口分页、数据清洗等工程场景中,上述知识能显著降低返工率。以一份经典Python练习题集为样例,通过填空题、选择题、程序改错的逐类拆解,并借助一个40行的自测脚本,可将静态题库转化为交互式测验,帮助学习者和团队快速定位基础短板。

weixin_34248487的博客 410

Python学习:random模块下的choices()函数详解

1.random.choice(seq)函数 从非空序列中随机选取一个数据并返回,该序列可以是list、tuple、str、set。 举例: import random print(random.choice('choice')) 结果:choice其中任意一个字母,可能是c也可能是h... 2.random.choices(population,weights=None,*,cum_weights=None,k=1)函数 population:集群。 weights:相对权重。 cum_weigh

景墨轩 7万+

EtherCAT从站协议栈---- sampleappl.c 文件解析

这个源文件实际上包含该项目的入口函数main函数。 那么如何找到入口函数呢? 可以进入debug的simulator模式,选中run to main(), 当执行完启动文件startup_cm3.s后就进入了main函数(注意在main函数之前还进入了SystemInit函数), 如下图所示: 这个main函数主要架构如下: int main(void) { HW_Init(); /*PDI(过程数据接口)初始化,这里用的是MCI接.

Jiawei_Z的博客 3068

高德地图+Three.js实战:手把手教你打造数字农场3D可视化大屏(附完整源码)

本文详细介绍了如何利用高德地图JS API与Three.js技术栈,构建一个功能强大的数字农场3D可视化大屏。文章从技术选型、架构设计出发,深入讲解了坐标对齐、图层管理、性能优化等核心工程实践,并提供了完整的模块化代码示例,旨在为智慧农业及类似场景的3D地理可视化项目提供一套可复用的解决方案。

k8s6orchestrator的博客 890

np.random.choice用法中文和样例详解

官方介绍http://docs.scipy.org/doc/numpy-dev/reference/generated/numpy.random.choice.htmlhttps://docs.python.org/3/library/random.htmlnp.random.choiceRandomState.choice(a, size=None, replace=True, p=None)a...

wyx100的专栏 1万+

【转载】参数估计(Parameter Estimation):频率学派(最大似然估计MLE、最大后验估计MAP)与贝叶斯学派(贝叶斯估计BPE)

基础 频率学派与贝叶斯学派 http://www.douban.com/group/topic/16719644/ http://www.zhihu.com/question/20587681 最大似然估计(Maximum likelihood estimation,MLE) http://baike.baidu.com/view/1918804.htm http://baike.baidu.co

影 的专栏 3413

Python choices()函数详解、random模块下的常用函数

random模块下的方法详解: 1.random.random() 随机生成一个[0,1)之间的浮点数。 2.random.randint(a,b) 随机生成[a,b]范围内一个整数。 3.random.randrange(a,b,step) 不指定step,随机生成[a,b)范围内一个整数。 指定step,step作为步长会进一步限制[a,b)的范围,比如randrange(0,11...

ckk727的博客 10万+

[Unity]-[UI]-[Image] 关于UI精灵图资源导入设置的详细解释

如果纹理存储了有特定含义的信息,并且您需要着色器中的确切值(例如,平滑度或金属度),请禁用此属性。此选项允许将纹理编码为特定格式(RGBM 或 dLDR,具体取决于平台)并通过后期处理步骤对纹理数据进行处理(推拉式扩张通道)。使用在3D模型的专业法线贴图。通用的纹理类型,一般在Material上的材质图片参数使用,比如漫反射、法线贴图这些。​​Compression​​:ASTC 6x6(移动端)或DXT5(PC)​​Compression​​:BC5(PC)或ASTC 6x6(移动端)

sky_smile_Allen的博客 2171

UE5 VlcMedia 插件编译与流媒体播放实战

本文详细介绍了在虚幻引擎5中编译并集成VlcMedia插件以解决流媒体播放难题的实战指南。针对UE5不再默认支持Win32 API导致的编译错误,文章提供了核心的构建配置文件修改步骤,并指导如何启用插件、创建VLC媒体播放器,最终成功播放如.m3u8等格式的网络直播流或点播视频。

weixin_29013129的博客 339

python random模块函数_Python random模块下的常用函数小结

random模块下的方法详解:1.random.random()随机生成一个[0,1)之间的浮点数。2.random.randint(a,b)随机生成[a,b]范围内一个整数。3.random.randrange(a,b,step)不指定step,随机生成[a,b)范围内一个整数。指定step,step作为步长会进一步限制[a,b)的范围,比如randrange(0,11,2)意即生成[0,11)...

weixin_28900989的博客 311

AI大模型驱动的智能座舱研发体系重构

AI大模型正重构智能座舱研发体系的核心逻辑,需以场景认知为起点、混合架构为支柱、AI原生生态为落脚点。未来,研发体系需持续融合认知科学、边缘计算与开放生态理论,推动座舱从“工具”进化为“伙伴”。

我的专栏 1916

Python random.choices()函数详解:从权重抽样到实战应用

在Python编程中,随机抽样是数据模拟、算法测试和概率决策的基础操作。其核心原理是通过伪随机数生成器,在可控的随机性下进行数据选取,为模拟现实世界的不确定性提供了技术手段。这一技术的价值在于,它能将抽象的数学概率转化为可执行的程序逻辑,从而在游戏开发、机器学习数据采样、A/B测试分流和蒙特卡洛模拟等场景中发挥关键作用。本文聚焦于Python标准库中功能强大但常被低估的`random.choices()`函数,深入剖析其支持**权重抽样**和**有放回抽样**的机制,并通过对比`choice()`与`sam

weixin_29304985的博客 352

ESP32与BH1750光照传感器结合使用的Web服务器案例

请注意,为了使代码正常工作,你需要将代码中的"你的WiFi网络名称"和"你的WiFi网络密码"替换为你自己的WiFi网络凭据。在代码中,我们首先导入了所需的库文件,包括Wire库用于I2C通信,BH1750库用于与光照传感器通信,WiFi库和WebServer库用于创建Web服务器。接下来,我们将编写一个Arduino代码来控制ESP32与BH1750的通信,并将读取到的光照强度值显示在Web服务器上。函数用于处理根路径的请求,其中我们读取光照传感器的值,并将其显示在返回的HTML页面中。

server_api196的博客 617

Open3D DBSCAN聚类

DBSCAN算法做为一种有名的密度聚类算法,它是通过邻域参数(Distance,MinPts)来刻画样本分布的紧密程度。而在真正开始之前,首先要理解下面这几个概念:更为具体的内容也可参考这篇文章点云DBSCAN聚类算法。...

dayuhaitang1的博客 1795

Python random模块深度解析:从伪随机原理到工程实践

伪随机数生成是计算机科学中的基础概念,它通过确定性算法模拟真正的随机过程,为程序提供可控的不确定性。其核心原理基于数学算法从初始种子值生成看似随机的数字序列,这种特性在调试和实验复现中具有重要价值。在工程实践中,伪随机数广泛应用于游戏开发、数据科学、机器学习数据增强和蒙特卡洛模拟等场景。本文以Python的random模块为例,深入探讨梅森旋转算法这一高质量伪随机数生成器的实现机制,并解析如何通过种子控制实现随机过程的可复现性。同时,文章将对比分析random、numpy.random和secrets等不同

weixin_33901641的博客 428

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Python random模块深度解析:从伪随机数原理到实战应用

伪随机数生成器(PRNG)是计算机模拟随机性的核心技术,其核心原理是通过确定性算法和初始种子生成看似随机的数字序列。在Python中,random模块默认采用梅森旋转算法,提供了高质量的伪随机数生成能力。这一技术对于确保程序的可复现性至关重要,尤其在机器学习和科学计算中,固定种子能保证实验结果的一致性。从基础随机数生成到高级概率分布模拟,random模块支持均匀分布、正态分布等多种分布类型,并能进行序列采样和随机选择。在实际工程应用中,它被广泛用于数据模拟、蒙特卡洛方法、抽奖系统等场景。本文通过解析种子管理

weixin_34221332的博客 391

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Python内置数学模块实战指南:从math到decimal的精准应用

在Python编程中,数学运算是数据处理和科学计算的基础。理解数学模块的核心原理,能帮助开发者高效解决数值计算问题。Python标准库提供了多个内置数学模块,每个模块针对特定场景设计,掌握它们的技术价值在于能根据需求选择最合适的工具,避免常见陷阱。例如,math模块专注于实数运算,提供三角函数、对数等高性能函数;cmath模块则处理复数运算,适用于信号处理等工程领域。random模块生成伪随机数,用于模拟和抽样;statistics模块提供基础的统计分析功能;而decimal和fractions模块分别解决

weixin_30279671的博客 365

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

DeepSeek V4深度解析:MoE稀疏架构与长上下文优化实战

大模型推理正面临GPU显存瓶颈与长上下文效率衰减的双重挑战。MoE(Mixture of Experts)架构通过稀疏激活机制,将计算资源从‘全量刚性占用’转向‘按需弹性调度’,显著降低推理成本;而长上下文支持不再依赖简单外推,而是依托局部窗口、全局摘要与稀疏长程三级注意力协同建模,实现语义连贯性与计算可扩展性的统一。DeepSeek V4正是这一技术路径的工程化标杆——其细粒度专家设计、分层KV Cache管理及中文-代码联合表征能力,已在金融研报、合同审查、技术文档生成等真实场景中验证了推理效率提升37

weixin_30342209的博客 491

NumPy模块化架构解析:从核心模块到子模块的高效使用指南

在Python科学计算领域,模块化设计是构建可维护、可扩展代码库的核心思想。通过将功能按领域解耦,大型库能够保持结构清晰,同时提升代码的可读性和复用性。NumPy作为科学计算的基石,其模块化架构将庞大功能划分为核心模块与专业子模块,如`numpy.linalg`处理线性代数运算,`numpy.random`管理随机数生成。这种设计不仅遵循了“单一职责”原则,还通过惰性导入机制优化了性能。理解子模块的划分,能帮助开发者精准定位功能,避免在顶级命名空间中盲目搜索,从而在机器学习、信号处理等应用场景中提升开发效率

weixin_30500473的博客 375

Python打造可自定义随机点名抽签工具:从核心算法到GUI实战

随机化是计算机科学和数据处理中的基础概念,它通过算法模拟不确定性,为公平决策、任务分配和样本选择等场景提供技术支持。其核心原理通常基于伪随机数生成器,通过种子值产生看似随机、实则可复现的序列。在工程实践中,随机化技术广泛应用于A/B测试、负载均衡、游戏开发及模拟仿真等领域,其价值在于以可控的方式引入不确定性,从而优化流程或创造公平环境。本文聚焦于一个典型的轻量级应用场景——随机点名与抽签,并深入探讨如何利用Python的random和numpy库构建一个高度可定制、支持权重分配与名单管理的本地化工具。通过结

weixin_30333885的博客 511

Python扑克概率建模:从枚举到蒙特卡洛的实战分析框架

概率建模是理解随机现象的基础能力,其核心在于从有限离散样本空间中准确定义事件并计数。不同于黑箱调用统计库,本文聚焦可追溯、可验证的工程化实现路径——通过Python手写Card/Deck/Hand类构建真实牌理逻辑,结合itertools全量枚举(259万种五张组合)与蒙特卡洛模拟双轨验证,解决顺子判定、同花顺优先级、A双重身份等典型陷阱。该方法天然适配教学演示、算法审计与风控校验,亦可泛化至金融衍生品定价、游戏平衡性分析等需精确离散概率推演的场景,体现‘用代码重现实体规则’这一概率计算本质。

weixin_30591551的博客 402

ER-Save-Editor|艾尔登法环存档编辑器,让加错点不再废档

艾尔登法环里最扎心的两件事:属性点加错方向,关键道具丢了。ER-Save-Editor 是一个开源的艾尔登法环存档编辑器,直接打开存档文件就能改,不用进游戏。它支持 PC 的 sl2 存档和 PlayStation 经 Save Wizard 导出的 txt 存档,一个存档里最多 10 个角色槽位都能单独编辑。属性、等级、魂数、武器防具、事件标记,全部在图形界面里点选完成,改完另存一份文件即可用。

gitblog_00399的博客 197

GPT-4o Mini微调实战:QLoRA+业务驱动的轻量级模型校准

大语言模型微调(Fine-tuning)是将通用基座模型适配至垂直场景的关键工程手段,其核心在于平衡效果、成本与部署约束。相比提示词工程的边际收益递减,微调通过参数更新实现更稳定的任务性能跃迁,尤其适用于高精度要求、低延迟敏感、资源受限的生产环境。GPT-4o Mini作为OpenAI官方轻量级模型,凭借低API延迟与可控成本,成为边缘侧与SaaS应用微调的理想载体;而QLoRA技术则通过4-bit量化与低秩适配,在显存压缩、训练加速与精度保持间取得最优解。本文聚焦真实业务场景——合同比对、工单分类、情绪分

weixin_33874713的博客 382
上一篇: ECCV 2024 | 扩散模型diffusion优化新思路:12篇前沿论文深度解析
下一篇: Windows/Linux双系统下,用ping命令快速查IP的5种隐藏技巧(含常见错误修复)
algae
博客等级 码龄19年 1378粉丝 1719原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值