杰瑞科技汇

Python的rand和random有什么区别?

下面我将为你详细解释 random 模块,并说明为什么 rand 不是 Python 的标准部分。

Python的rand和random有什么区别?-图1
(图片来源网络,侵删)

特性 random (Python 标准库) rand (非 Python 标准库)
存在性 Python 的标准库模块 不是 Python 的标准库函数或模块
来源 Python 内置,无需安装 混淆: 可能来自 C/C++ 的 rand()
第三方库: 如 numpy.random.rand()
功能 提供各种伪随机数生成功能 rand(): 生成一个随机整数
rand(d0, d1, ..., dn): 生成指定形状的随机浮点数数组 (NumPy)
使用方式 import random
random.randint(1, 10)
C 风格: import random; random.randint(1, 10) (不推荐)
NumPy 风格: import numpy as np; np.random.rand()

Python 标准库:random 模块

random 是 Python 内置的模块,用于生成各种类型的伪随机数,它提供了非常丰富且易于使用的函数,是日常编程中最常用的随机数工具。

如何使用?

首先需要导入模块:

import random

常用功能示例:

a) 生成一个随机浮点数 random.random() 返回 [0.0, 1.0) 范围内的一个随机浮点数。

print(random.random())  # 可能输出: 0.37444887175646646

b) 生成一个指定范围的随机整数 random.randint(a, b) 返回 [a, b] 范围内的一个随机整数(包含 a 和 b)。

Python的rand和random有什么区别?-图2
(图片来源网络,侵删)
print(random.randint(1, 10))  # 可能输出: 7

c) 从一个序列中随机选择一个元素 random.choice(seq) 从序列(如列表、元组、字符串)中随机返回一个元素。

my_list = ['apple', 'banana', 'cherry']
print(random.choice(my_list))  # 可能输出: 'banana'

d) 将一个序列中的元素随机打乱 random.shuffle(seq) 会原地(in-place)打乱序列的顺序。

my_list = [1, 2, 3, 4, 5]
random.shuffle(my_list)
print(my_list)  # 可能输出: [3, 1, 5, 2, 4]

e) 从一个序列中随机抽取 k 个不重复的元素 random.sample(population, k) 返回一个新的列表,包含从 population 中随机抽取的 k 个不重复的元素。

my_list = [1, 2, 3, 4, 5]
print(random.sample(my_list, 2))  # 可能输出: [4, 1]

f) 在指定范围内生成一个随机浮点数 random.uniform(a, b) 返回 [a, b] 范围内的一个随机浮点数。

Python的rand和random有什么区别?-图3
(图片来源网络,侵删)
print(random.uniform(1.5, 2.5))  # 可能输出: 1.987654321

rand 的混淆来源

你之所以会听到 rand,通常是因为以下两种情况:

来自 C/C++ 语言的影响

在 C/C++ 语言中,有一个标准函数叫做 rand(),它用于生成一个随机整数(通常是 0 到 RAND_MAX 之间,RAND_MAX 是一个常量,至少为 32767)。

一些有 C/C++ 基础的 Python 开发者可能会下意识地寻找一个名为 rand 的函数,在 Python 的 random 模块中,功能与之最接近的是 random.randint()

重要提示:Python 的 random 模块底层也使用了类似 C 的伪随机数生成器,但它通过 random 模块提供了更高级、更 Pythonic 的接口。你不需要也不应该去寻找一个名为 rand 的函数来替代 random.randint

来自 NumPy 库 (numpy.random.rand)

这是 rand 在 Python 数据科学生态圈中最常见的来源。NumPy 是一个用于科学计算的强大库,其 numpy.random 子模块提供了大量用于高效生成随机数(尤其是数组)的函数。

numpy.random.rand() 的功能与 Python 内置的 random.random() 不同:

  • 功能: 生成一个或多个在 [0.0, 1.0) 范围内均匀分布的随机浮点数。
  • 特点: 它可以生成一个多维数组,数组的形状由函数的参数决定。

如何使用 NumPy 的 rand

首先需要安装并导入 NumPy:

pip install numpy

然后在代码中:

import numpy as np
# 生成一个随机浮点数 (标量)
print(np.random.rand())
# 可能输出: 0.12345678901234567
# 生成一个形状为 (2, 3) 的随机浮点数数组
print(np.random.rand(2, 3))
# 可能输出:
# [[0.987654321 0.87654321  0.7654321 ]
#  [0.654321   0.54321     0.4321   ]]

总结与对比

需求 推荐的 Python 方式 (NumPy) 方式 (用于科学计算)
生成 [0.0, 1.0) 的随机浮点数 import random; random.random() import numpy as np; np.random.rand()
生成 [a, b] 的随机整数 import random; random.randint(a, b) import numpy as np; np.random.randint(a, b+1) (注意b+1)
生成随机浮点数数组 不适用,用列表推导式 import numpy as np; np.random.rand(rows, cols)

最终建议:

  • 如果你是进行常规的 Python 脚本编写、游戏逻辑、简单应用等,请使用 random 模块。 它是标准库,无需安装,功能足够强大且易用。
  • 如果你在进行数据科学、机器学习、数值计算等,并且需要处理大量的多维数组数据,请使用 NumPy 库。 numpy.random.rand() 在性能和功能上远超 Python 内置的 random

简单记忆:

  • random 是 Python 自己的随机数工具箱。
  • np.random.randNumPy 这个第三方科学计算库的工具箱里的一个工具。
分享:
扫描分享到社交APP
上一篇
下一篇