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

为何np.random.choice运行速度远慢于np.random.randint?

np.random.choice 与 np.random.randint 的性能差异疑问

我看到资料称np.random.choice比np.random.randint更快,但对比以下两段代码的运行速度:

第一段代码:

import numpy as np

for i in range(100000):
    np.random.choice(100)

第二段代码:

import numpy as np

for i in range(100000):
    np.random.randint(100)

实际测试后发现np.random.randint明显更快,请问这两个函数的差异是什么?


核心差异解析

1. 功能定位与底层实现

  • np.random.randint是专门生成均匀分布整数的轻量函数,底层直接调用高效的整数随机生成器,逻辑简单,几乎无额外开销。当仅需[0, n)范围内的整数时,它是针对性优化的实现。
  • np.random.choice是通用型采样工具,支持从任意一维数组(不仅是连续整数范围)中采样,还支持加权采样、无放回采样等复杂逻辑。即使仅传入整数n,它也会先创建0到n-1的临时数组,再从中采样,这一步额外的数组创建和索引操作会带来明显性能损耗。

2. 调用场景对性能的影响

你测试的是循环内单次调用的场景,这种情况下choice的临时数组初始化开销会被循环放大。但如果是批量生成大量随机数(直接指定size参数一次性生成),两者的性能差距会显著缩小:

# 批量生成100000个随机数的写法
np.random.choice(100, size=100000)
np.random.randint(100, size=100000)

此时choice可以一次性完成数组创建与采样,避免了循环带来的Python层额外开销,性能表现会更接近randint。

3. 资料结论的适用前提

你看到的“choice比randint更快”的结论,通常是基于复杂采样场景:比如需要从非连续数组中采样,或者需要加权、无放回采样逻辑时,choice是原生支持这些功能的高效实现;而如果用randint模拟相同逻辑,需要额外编写大量代码,性能反而会更差。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 09:20:12