Python NumPy 随机数与操作:全面掌握随机生成与分布
文章目录
本文系统介绍了如何使用 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 np
def 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, 2
print(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.20398563
0.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