Python NumPy 随机数与操作:全面掌握随机生成与分布

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]

七 源码地址

代码地址:

国内看 Giteenumpy/随机数和随机操作.py

国外看 GitHubnumpy/随机数和随机操作.py

引用 莫烦 Python

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值