Python NumPy 随机数与操作:全面掌握随机生成与分布
文章目录
- Python NumPy 随机数与操作:全面掌握随机生成与分布
- 一 主要涉及功能
- 二 多种随机数生成
- 1 常规随机数生成
- 2 使用 numpy 生成
- 三 在原有数据上随机
- 1 随机已有数据
- 2 重新排列数据
- 3 随机生成序列数据
- 4 对已有维度数据乱序
- 四 随机分布
- 五 随机种子 seed
- 划重点
- 七 源码地址
本文系统介绍了如何使用 NumPy 生成多种随机数和处理随机操作。通过 np.random.rand()
、np.random.randint()
等函数,能够轻松生成范围不同的随机数,并通过 np.random.choice()
实现对已有数据的随机选择与排列。此外,文章还深入探讨了如何生成正态分布和均匀分布的随机数据,并讲解了随机种子的概念及其重要性,确保在需要时能够重现相同的随机序列。NumPy 强大的随机数生成和处理功能在数据分析、机器学习等领域中有着广泛应用,是高效处理随机数据的重要工具。
导入 numpy 库
import numpy as np
一 主要涉及功能
多种随机数生成 | 给你施加随机 | 随机分布 | 随机种子的重要性 |
---|---|---|---|
np.random.rand() | np.random.choice() | np.random.normal() | np.random.seed() |
np.random.random() | np.random.shuffle() | np.random.uniform() | |
np.random.randn() | np.random.permutation() | ||
np.random.randint() |
二 多种随机数生成
1 常规随机数生成
import random
print(random.random())
print(random.randint(1, 10))
2 使用 numpy 生成
# 随机生成 [0, 1) 之间的数
dim1, dim2 = 3, 2
print(np.random.rand(dim1, dim2)) # 你还能继续添加 dim3 或更多
print(np.random.randn(dim1, dim2))
print(np.random.randint(low=-3, high=6, size=10))
三 在原有数据上随机
1 随机已有数据
对已有的数据做随机化处理,随机从一组数据中选择。
# 给你施加随机
data = np.array([2, 1, 3, 4, 6])
print("选一个:", np.random.choice(data))
print("选多个:", np.random.choice(data, size=3))
print("不重复地选多个(不放回):", np.random.choice(data, size=3, replace=False))
print("带权重地选择:", np.random.choice(data, size=10, p=[0, 0, 0, 0.2, 0.8]))
2 重新排列数据
# 将源数据洗牌重新排列,如果你想保留源数据的话,记得 np.copy(data) 备份一下
data_copy = np.copy(data)
np.random.shuffle(data)
print("源数据:", data_copy)
print("shuffled:", data)
3 随机生成序列数据
print("直接出乱序序列:", np.random.permutation(10))
data = np.arange(12).reshape([6, 2])
print(data)
4 对已有维度数据乱序
# 多维数据在第一维度上乱序,指的是这个维度的行乱序
print("多维数据在第一维度上乱序:", np.random.permutation(data))
四 随机分布
生成 正态分布 和 均匀分布
# (均值,方差,size)
print("正态分布:", np.random.normal(1, 0.2, 10))# (最低,最高,size)
print("均匀分布:", np.random.uniform(-1, 1, 10))
五 随机种子 seed
Numpy 中的 random seed 概念,随机种子。当我们把种子固定的时候(用一个数字),同一个种子(数字)产生的随机序列就会一样。
# 随机种子的重要性
# seed(1) 代表的就是 1 号随机序列
np.random.seed(1)
print(np.random.randint(2, 10, size=3))
print(np.random.randint(2, 10, size=3))
划重点
重新设定种子,输入不同种子随机值不一样,输入相同种子随机值一样。
np.random.seed(2)
print(np.random.randint(2, 10, size=3))
np.random.seed(2)
print(np.random.randint(2, 10, size=3))
np.random.seed(3)
print(np.random.randint(2, 10, size=3))
六 完整代码示例
# This is a sample Python script.# Press ⌃R to execute it or replace it with your code.
# Press Double ⇧ to search everywhere for classes, files, tool windows, actions, and settings.import random
import numpy as npdef print_hi(name):# Use a breakpoint in the code line below to debug your script.print(f'Hi, {name}') # Press ⌘F8 to toggle the breakpoint.# 多种随机数生成print(random.random())print(random.randint(1, 10))# 随机生成 [0, 1) 之间的数dim1, dim2 = 3, 2print(np.random.rand(dim1, dim2)) # 你还能继续添加 dim3 或更多print(np.random.randn(dim1, dim2))print(np.random.randint(low=-3, high=6, size=10))# 给你施加随机# 对已有的数据做随机化处理,随机从一组数据中选择data = np.array([2, 1, 3, 4, 6])print("选一个:", np.random.choice(data))print("选多个:", np.random.choice(data, size=3))print("不重复地选多个(不放回):", np.random.choice(data, size=3, replace=False))print("带权重地选择:", np.random.choice(data, size=10, p=[0, 0, 0, 0.2, 0.8]))# 将源数据洗牌重新排列,如果你想保留源数据的话,记得 np.copy(data) 备份一下data_copy = np.copy(data)np.random.shuffle(data)print("源数据:", data_copy)print("shuffled:", data)print()print("直接出乱序序列:", np.random.permutation(10))data = np.arange(12).reshape([6, 2])print(data)# 多维数据在第一维度上乱序,指的是这个维度的行乱序print("多维数据在第一维度上乱序:", np.random.permutation(data))# 随机分布# (均值,方差,size)print("正态分布:", np.random.normal(1, 0.2, 10))# (最低,最高,size)print("均匀分布:", np.random.uniform(-1, 1, 10))# 随机种子的重要性# seed(1) 代表的就是 1 号随机序列# Numpy 中的 random seed 概念,随机种子。当我们把种子固定的时候(用一个数字),同一个种子(数字)产生的随机序列就会一样np.random.seed(1)print(np.random.randint(2, 10, size=3))print(np.random.randint(2, 10, size=3))# 重新设定种子,输入不同种子随机值不一样,输入相同种子随机值一样np.random.seed(2)print(np.random.randint(2, 10, size=3))np.random.seed(2)print(np.random.randint(2, 10, size=3))np.random.seed(3)print(np.random.randint(2, 10, size=3))# Press the green button in the gutter to run the script.
if __name__ == '__main__':print_hi('随机数和随机操作')# See PyCharm help at https://www.jetbrains.com/help/pycharm/
复制粘贴并覆盖到你的 main.py 中运行,运行结果如下。
Hi, 随机数和随机操作
0.26820579663002186
3
[[0.23769625 0.84180159][0.6803027 0.12729691][0.04838627 0.70520346]]
[[ 0.70639806 -1.6954005 ][ 0.27178615 -0.109168 ][-0.71126773 1.60656291]]
[ 3 -2 5 3 3 5 5 -3 -1 2]
选一个: 4
选多个: [6 6 2]
不重复地选多个(不放回): [3 2 1]
带权重地选择: [6 6 6 6 6 6 6 6 6 6]
源数据: [2 1 3 4 6]
shuffled: [4 1 6 3 2]直接出乱序序列: [9 8 5 4 1 0 2 3 7 6]
[[ 0 1][ 2 3][ 4 5][ 6 7][ 8 9][10 11]]
多维数据在第一维度上乱序: [[ 4 5][ 0 1][ 6 7][ 8 9][ 2 3][10 11]]
正态分布: [0.65646377 1.00470103 1.24920803 1.0686203 1.32182154 1.203985630.90713109 0.69131479 1.25044157 1.23252619]
均匀分布: [-0.46948493 -0.47675182 -0.26496685 -0.69132407 -0.31516505 -0.10873339-0.51476718 -0.66316394 0.54334361 0.75461276]
[7 5 6]
[2 9 3]
[2 9 7]
[2 9 7]
[4 2 3]
七 源码地址
代码地址:
国内看 Gitee 之 numpy/随机数和随机操作.py
国外看 GitHub 之 numpy/随机数和随机操作.py
引用 莫烦 Python