Numpy生成数总结(随机整数randint,固定步长arange,分布)

一、np.random.randint

随机生成10个0-20之间的随机整数

import numpy as np
np.random.randint(0, 20, 10)
array([11,  8, 17, 17,  0,  1,  9, 10, 16, 17])

二、Numpy.arange

生成固定步长的数:Numpy.arange()
np.arange()函数分为三种情况:
1)一个参数时,参数值为终点,起点取默认值0,步长取默认值1。
生成范围为0-10,步长为1的数据

np.arange(10)

输出:

array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

2)两个参数时,第一个参数为起点,第二个参数为终点,步长取默认值1。
生成范围为0-10,步长为1的数据

np.arange(0, 10)

输出:

array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

3)三个参数时,第一个参数为起点,第二个参数为终点,第三个参数为步长。其中步长支持小数
生成范围为0-100,步长为10的数据

np.arange(0, 100, 10)

输出:

array([ 0, 10, 20, 30, 40, 50, 60, 70, 80, 90])

生成范围为0-1,步长为0.1的数据

np.arange(0, 1, 0.1)

输出:

array([0. , 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9])

三、指定分布(正态+均匀)

正态分布

Numpy.random.normal(mean, sigma, size)
标准正态分布
均值为0,方差为1,五个数

np.random.normal(0, 1, 5)

输出:

array([ 1.62434536, -0.61175641, -0.52817175, -1.07296862,  0.86540763])

均匀分布

Numpy.random.uniform(low, high, size)

np.random.uniform(1,10,5)

输出:

array([5.47289693, 2.1207332 , 8.72810212, 1.21595415, 5.13489314])

四、其他

添加随机种子,可以使得生成的数据固定

np.random.seed(2022)
<think>好的,用户现在想要了解如何在Python生成随机整数。之前用户已经询问过计算机生成字的函,现在具体到随机整数生成,可能需要更详细的步骤或不同方法。 首先,我需要确定用户对Python的熟悉程度,但根据问题本身,用户可能已经有一些基础,所以需要给出清晰的代码示例和解释。用户之前的问题回答中已经提到了`random.randint`和`secrets.randbelow`,可能需要进一步展开,或者补充其他方法。 接下来,回顾之前的回答,用户已经了解PRNG和真随机数的区别,所以这里可能需要强调不同模块的适用场景,比如普通用途用`random`,安全相关用`secrets`。此外,可能还有其他库如`numpy`生成组,这可能在处理大量据时更高效。 然后,用户可能需要不同范围的例子,比如包含或不包含边界值,或者生成多个随机数。此外,可能需要注意常见错误,比如参顺序,或者种子设置的影响。 还要考虑用户的实际应用场景,比如游戏开发、数据分析、密码生成等,对应不同的函推荐。同时,提醒安全性的问题,避免在需要高安全性的地方使用不合适的模块。 最后,检查是否有遗漏的方法,比如使用`random.randrange`,或者结合列表生成生成多个随机数。需要确保代码示例正确,符合Python语法,并且解释清晰易懂。</think>以下是Python生成随机整数的详细方法及示例: --- ### **一、基础方法:使用`random`模块** #### 1. **`random.randint(a, b)`** - **功能**:生成闭区间$[a, b]$内的整数(包含两端) - **示例**: ```python import random # 生成1到10之间的随机整数(包括1和10) num = random.randint(1, 10) print(num) # 示例输出:7 ``` #### 2. **`random.randrange(start, stop, step)`** - **功能**:类似`range()`函生成$[start, stop)$内按步长递增的随机整数 - **省略参示例**: ```python # 生成0-9的随机整数(等效于randint(0,9)) num = random.randrange(10) print(num) # 示例输出:3 # 生成5-15之间的奇 odd_num = random.randrange(5, 16, 2) print(odd_num) # 示例输出:11 ``` --- ### **二、安全场景:使用`secrets`模块** #### 1. **`secrets.randbelow(n)`** - **功能**:生成$[0, n)$的随机整数(密码学安全) - **示例**: ```python import secrets # 生成0-999之间的安全随机整数 secure_num = secrets.randbelow(1000) print(secure_num) # 示例输出:472 ``` #### 2. **`secrets.choice(sequence)`** - **功能**:从序列中随机选取一个元素(适用于生成密钥字符) - **示例**: ```python import string # 生成8位随机数字密码 digits = string.digits # "0123456789" password = ''.join(secrets.choice(digits) for _ in range(8)) print(password) # 示例输出:"38520917" ``` --- ### **三、批量生成:使用`numpy`库** #### 1. **`numpy.random.randint()`** - **优势**:高效生成大规模随机整数组 - **示例**: ```python import numpy as np # 生成10个[50,100)随机整数 arr = np.random.randint(50, 100, size=10) print(arr) # 示例输出:[63 82 57 91 75 68 54 89 71 60] ``` #### 2. **指定据类型**: ```python # 生成16位无符号整数(0-65535) big_num = np.random.randint(0, 65536, dtype=np.uint16) print(big_num) # 示例输出:42679 ``` --- ### **四、关键注意事项** | 场景 | 推荐方法 | 原因 | |--------------------|--------------------------|-----------------------------| | 一般随机需求 | `random.randint()` | 简单快速,无需额外依赖 | | 密码/密钥生成 | `secrets`模块 | 防预测,满足密码学安全要求 | | 生成10万+个随机数 | `numpy.random.randint()` | 比纯Python快50倍以上 | | 需要固定随机序列 | 设置种子`random.seed()` | 保证实验结果可复现 | --- ### **五、常见错误避免** 1. **参顺序混淆**: ```python # 错误写法:random.randint(10, 1)(a必须≤b) # 正确写法:random.randint(1, 10) ``` 2. **范围理解错误**: - `randint(1, 10)`包含10,而`randrange(1, 10)`不包含10 3. **安全误用**: ```python # 高风险:用random生成密码 # 正确:改用secrets.choice() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱挠静香的下巴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值