【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】1.24 随机宇宙:生成现实世界数据的艺术

news2025/2/3 5:48:10

在这里插入图片描述

1.24 随机宇宙:生成现实世界数据的艺术

目录

随机宇宙:生成现实世界数据的艺术
引言
复杂联合分布的采样技巧
随机游走的蒙特卡洛实现
基于物理规律的生成模型
随机数在加密中的应用
总结
参考文献
  1. 引言
  2. 复杂联合分布的采样技巧
  3. 随机游走的蒙特卡洛实现
  4. 基于物理规律的生成模型
  5. 随机数在加密中的应用
  6. 总结
  7. 参考文献
随机数生成
分布采样
物理模拟
密码学应用
多元正态分布
随机过程
布朗运动
流体动力学
安全随机数
随机性检验

1.24.1 引言

在数据科学和机器学习中,生成现实世界数据是一项重要的任务。现实世界的数据往往具有复杂的分布和结构,需要使用高阶的采样技巧和生成模型来模拟。本文将详细介绍如何使用NumPy生成复杂联合分布的数据、实现随机游走、基于物理规律的生成模型以及随机数在加密中的应用。
多元分布采样技巧

协方差矩阵采样公式

x ∼ N ( μ , Σ ) \mathbf{x} \sim \mathcal{N}(\boldsymbol{\mu}, \mathbf{\Sigma}) xN(μ,Σ)
其中 Σ = L L T \mathbf{\Sigma} = \mathbf{L}\mathbf{L}^T Σ=LLT(Cholesky分解)

import numpy as np

def multivariate_normal_sampling(mean, cov, size=1000):
    """多元正态分布采样"""
    L = np.linalg.cholesky(cov)  # Cholesky分解
    z = np.random.normal(size=(len(mean), size))
    return mean + L @ z

# 定义参数
mean = [2, 3]
cov = [[1.0, 0.8],
       [0.8, 1.0]]

# 生成样本
samples = multivariate_normal_sampling(mean, cov).T

# 可视化
import matplotlib.pyplot as plt
plt.scatter(samples[:,0], samples[:,1], alpha=0.5)
plt.title("二元正态分布采样")
plt.xlabel("X")
plt.ylabel("Y")
plt.grid(True)
plt.show()

1.24.2 复杂联合分布的采样技巧

1.24.2.1 多元正态分布采样的基本原理

多元正态分布是一种常见的概率分布,用于描述多个随机变量之间的线性相关性。NumPy提供了numpy.random.multivariate_normal函数来生成多元正态分布的样本。

1.24.2.1.1 多元正态分布的定义

多元正态分布的概率密度函数(PDF)定义为:

f ( x ; μ , Σ ) = 1 ( 2 π ) k ∣ Σ ∣ exp ⁡ ( − 1 2 ( x − μ ) T Σ − 1 ( x − μ ) ) f(\mathbf{x}; \boldsymbol{\mu}, \boldsymbol{\Sigma}) = \frac{1}{\sqrt{(2\pi)^k |\boldsymbol{\Sigma}|}} \exp\left( -\frac{1}{2} (\mathbf{x} - \boldsymbol{\mu})^T \boldsymbol{\Sigma}^{-1} (\mathbf{x} - \boldsymbol{\mu}) \right) f(x;μ,Σ)=(2π)kΣ 1exp(21(xμ)TΣ1(xμ))

其中:

  • x \mathbf{x} x k k k 维随机向量
  • μ \boldsymbol{\mu} μ k k k 维均值向量
  • Σ \boldsymbol{\Sigma} Σ k × k k \times k k×k 的协方差矩阵
1.24.2.2 代码示例
1.24.2.2.1 多元正态分布采样实例
import numpy as np
import matplotlib.pyplot as plt

# 定义均值向量和协方差矩阵
mean = np.array([0, 0])  # 均值向量
cov = np.array([[1, 0.5], [0.5, 1]])  # 协方差矩阵

# 生成样本
samples = np.random.multivariate_normal(mean, cov, 1000)  # 生成1000个样本

# 绘制样本的散点图
plt.figure(figsize=(10, 6))
plt.scatter(samples[:, 0], samples[:, 1], alpha=0.5)  # 散点图
plt.xlabel('X1')
plt.ylabel('X2')
plt.title('多元正态分布采样')
plt.show()

1.24.3 随机游走的蒙特卡洛实现

1.24.3.1 随机游走的基本原理

随机游走(Random Walk)是一种数学模型,用于描述路径上的随机变化。在金融、物理等多个领域都有广泛的应用。蒙特卡洛方法是一种通过随机抽样来解决问题的数值计算方法。

1.24.3.1.1 代码示例
1.24.3.1.1.1 布朗运动模拟完整代码
import numpy as np
import matplotlib.pyplot as plt

# 定义步长和步数
step_size = 1
num_steps = 1000

# 生成随机游走路径
steps = np.random.normal(0, step_size, (num_steps, 2))  # 生成二维随机步长
path = np.cumsum(steps, axis=0)  # 累积步长得到路径

# 绘制随机游走路径
plt.figure(figsize=(10, 6))
plt.plot(path[:, 0], path[:, 1], label='随机游走路径', color='b', linestyle='-', marker='o')
plt.xlabel('X')
plt.ylabel('Y')
plt.title('布朗运动模拟')
plt.legend()
plt.show()
二维布朗运动实现
def brownian_motion(steps=1000, delta=0.1):
    """生成二维布朗运动路径"""
    dx = np.random.normal(scale=delta, size=steps)
    dy = np.random.normal(scale=delta, size=steps)
    x = np.cumsum(dx)
    y = np.cumsum(dy)
    return x, y

# 生成10条路径
plt.figure(figsize=(10,6))
for _ in range(10):
    x, y = brownian_motion()
    plt.plot(x, y, alpha=0.5)
plt.title("二维布朗运动模拟")
plt.xlabel("X方向")
plt.ylabel("Y方向")
plt.grid(True)
plt.show()

1.24.4 基于物理规律的生成模型

1.24.4.1 流体动力学粒子生成的原理

流体动力学(Fluid Dynamics)描述流体的运动和行为。通过模拟流体中的粒子运动,可以生成具有物理意义的数据。

1.24.4.1.1 代码示例
1.24.4.1.1.1 流体动力学粒子生成
import numpy as np
import matplotlib.pyplot as plt

# 定义参数
num_particles = 100
steps = 1000
dt = 0.01
diffusion_coeff = 0.1

# 生成初始位置
positions = np.random.rand(num_particles, 2)  # 生成100个粒子的初始位置

# 生成随机扰动
perturbations = np.random.normal(0, np.sqrt(2 * diffusion_coeff * dt), (steps, num_particles, 2))

# 更新粒子位置
for step in range(1, steps):
    positions += perturbations[step]

# 绘制粒子轨迹
plt.figure(figsize=(10, 6))
for i in range(num_particles):
    plt.plot(positions[:, i, 0], positions[:, i, 1], alpha=0.5, label=f'Particle {i + 1}')
plt.xlabel('X')
plt.ylabel('Y')
plt.title('流体动力学粒子生成')
plt.legend()
plt.show()
流体动力学粒子生成 SPH方法简化实现
def fluid_particles(num=1000, box_size=10, viscosity=0.1):
    """流体粒子动力学模拟"""
    # 初始化粒子
    pos = np.random.rand(num, 3) * box_size
    vel = np.zeros((num, 3))
    
    # 模拟时间步
    for _ in range(100):
        # 计算密度(简化)
        dist = np.sqrt(((pos[:,None] - pos)**2).sum(axis=2))
        density = np.exp(-dist**2 / 2).sum(axis=1)
        
        # 计算压力梯度
        pressure = 0.1 * (density - 1.0)
        acceleration = -np.gradient(pressure.reshape(num,1), axis=0) / density[:,None]
        
        # 更新速度和位置
        vel += viscosity * acceleration
        pos += vel * 0.01
        
        # 边界碰撞
        pos = np.clip(pos, 0, box_size)
        vel *= (pos == 0) | (pos == box_size) * -1
    
    return pos

# 生成流体粒子
particles = fluid_particles()

# 三维可视化
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure(figsize=(10,8))
ax = fig.add_subplot(111, projection='3d')
ax.scatter(particles[:,0], particles[:,1], particles[:,2], s=2)
ax.set_title("流体粒子分布")
plt.show()

1.24.5 随机数在加密中的应用

1.24.5.1 密码学安全随机数生成的原理

在密码学中,随机数生成是一项关键任务,需要确保生成的随机数具有高度的不可预测性和安全性。NumPy的随机数生成器可以用于生成伪随机数,但为了安全起见,通常使用专门的密码学随机数生成库。

1.24.5.1.1 代码示例
1.24.5.1.1.1 密码学安全随机数生成
import numpy as np
import os
import secrets

# 生成密码学安全随机数
def secure_random_number():
    return secrets.randbits(32)  # 生成32位随机数

# 生成随机数
random_numbers = [secure_random_number() for _ in range(1000)]  # 生成1000个随机数

# 打印前10个随机数
print(f"生成的前10个随机数: {random_numbers[:10]}")
安全随机数生成对比
import secrets

# 不安全随机数
normal_random = np.random.randint(0, 256, size=32)

# 安全随机数生成
secure_random = np.frombuffer(secrets.token_bytes(32), dtype=np.uint8)

# 随机性对比测试
print("普通随机数:", normal_random[:4], "...")
print("安全随机数:", secure_random[:4], "...")

# 密钥生成示例
def generate_aes_key():
    return secrets.token_bytes(32)  # AES-256密钥

print("AES密钥示例:", generate_aes_key().hex()[:16]+"...")

1.24.6 随机性检验的NIST测试

1.24.6.1 NIST测试的基本原理

NIST(美国国家标准与技术研究院)的随机性测试是一组用于评估随机数生成器的统计测试。这些测试可以帮助确保生成的随机数具有良好的随机性和统计特性。

1.24.6.1.1 代码示例
1.24.6.1.1.1 随机性检验的NIST测试
import numpy as np
import os
import secrets
import niststats  # 假设已经安装了niststats库

# 生成密码学安全随机数
random_numbers = np.array([secrets.randbits(32) for _ in range(1000000)])  # 生成100万个随机数

# 将随机数转换为二进制
binary_data = ''.join(format(x, '032b') for x in random_numbers)

# 进行NIST测试
results = niststats.run_all_tests(binary_data, 1000000 * 32)

# 打印测试结果
for test, result in results.items():
    print(f"测试: {test}")
    print(f"结果: {result}")
随机性质量检验 NIST测试套件实现
from collections import Counter

def monobit_test(bits):
    """NIST单比特测试"""
    ones = sum(bits)
    s = abs(ones - len(bits)/2) / np.sqrt(len(bits)/4)
    p_value = np.math.erfc(s / np.sqrt(2))
    return p_value > 0.01

def runs_test(bits):
    """NIST游程测试"""
    runs, n1 = 1, sum(bits)
    for i in range(1, len(bits)):
        if bits[i] != bits[i-1]:
            runs += 1
    expected = (2*n1*(len(bits)-n1))/len(bits) + 1
    std_dev = np.sqrt((expected-1)*(expected-2)/(len(bits)-1))
    z = (runs - expected) / std_dev
    return abs(z) < 1.96

# 测试随机序列
bits = np.random.randint(0, 2, 1000)
print("单比特测试通过:", monobit_test(bits))
print("游程测试通过:", runs_test(bits))

1.24.7 总结

本文详细介绍了如何使用NumPy生成现实世界数据的艺术,包括复杂联合分布的采样技巧、随机游走的蒙特卡洛实现、基于物理规律的生成模型以及随机数在加密中的应用。通过这些内容,希望读者能够更好地理解和应用NumPy的随机数据生成功能,从而在实际项目中提高数据处理和分析的效率。

1.24.8 参考文献

参考资料名链接
NumPy官方文档https://numpy.org/doc/stable/
Matplotlib官方文档https://matplotlib.org/
secrets模块官方文档https://docs.python.org/3/library/secrets.html
NIST随机性测试文档https://csrc.nist.gov/projects/random-bit-generation"testing-random-number-generators"
多元正态分布https://en.wikipedia.org/wiki/Multivariate_normal_distribution
蒙特卡洛方法https://en.wikipedia.org/wiki/Monte_Carlo_method
布朗运动https://en.wikipedia.org/wiki/Brownian_motion
流体动力学https://en.wikipedia.org/wiki/Fluid_dynamics
随机数生成器https://en.wikipedia.org/wiki/Random_number_generation
密码学安全随机数生成https://www.keycdn.com/support/what-are-crypto-safe-random-numbers
Python数据科学手册https://jakevdp.github.io/PythonDataScienceHandbook/
数据可视化https://seaborn.pydata.org/
CUDA编程入门https://developer.nvidia.com/blog/getting-started-cuda-python/
大规模数据处理https://spark.apache.org/docs/latest/api/python/
随机性测试库https://github.com/axcheron/niststats

这篇文章包含了详细的原理介绍、代码示例、源码注释以及案例等。希望这对您有帮助。如果有任何问题请随私信或评论告诉我。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2291110.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

爬虫基础(三)Session和Cookie讲解

目录 一、前备知识点 &#xff08;1&#xff09;静态网页 &#xff08;2&#xff09;动态网页 &#xff08;3&#xff09;无状态HTTP 二、Session和Cookie 三、Session 四、Cookie &#xff08;1&#xff09;维持过程 &#xff08;2&#xff09;结构 正式开始说 Sessi…

HTMLCSS :下雪了

这段代码创建了一个动态的雪花飘落加载动画&#xff0c;通过 CSS 技术实现了雪花的下落和消失效果&#xff0c;为页面添加了视觉吸引力和动态感。 大家复制代码时&#xff0c;可能会因格式转换出现错乱&#xff0c;导致样式失效。建议先少量复制代码进行测试&#xff0c;若未能…

【Windows Server实战】生产环境云和NPS快速搭建

前置条件 本文假定你已达成以下前提条件&#xff1a; 有域控DC。有证书服务器&#xff08;AD CS&#xff09;。已使用Microsoft Intune或者GPO为客户机申请证书。服务器上至少有两张网卡&#xff08;如果用虚拟机做的测试环境&#xff0c;可以用一张HostOnly网卡做测试&#…

RHCSA——搭建FTP文件共享服务器

一、实验目的 1、掌握vsftpd服务器的配置方法 2、熟悉FTP客户端工具的使用 3、掌握常见的FTP服务器的故障排除 二、实验项目背景 某企业像架构一台FTP服务器&#xff0c;为企业局域网中的计算机提供文件传送的任务&#xff0c;为财务部门、销售部门和OA系统提供异地数据备…

IM 即时通讯系统-50-[特殊字符]cim(cross IM) 适用于开发者的分布式即时通讯系统

IM 开源系列 IM 即时通讯系统-41-开源 野火IM 专注于即时通讯实时音视频技术&#xff0c;提供优质可控的IMRTC能力 IM 即时通讯系统-42-基于netty实现的IM服务端,提供客户端jar包,可集成自己的登录系统 IM 即时通讯系统-43-简单的仿QQ聊天安卓APP IM 即时通讯系统-44-仿QQ即…

Python在线编辑器

from flask import Flask, render_template, request, jsonify import sys from io import StringIO import contextlib import subprocess import importlib import threading import time import ast import reapp Flask(__name__)RESTRICTED_PACKAGES {tkinter: 抱歉&…

ZZNUOJ(C/C++)基础练习1041——1050(详解版)

1041 : 数列求和2 题目描述 输入一个整数n&#xff0c;输出数列1-1/31/5-……前n项的和。 输入 输入只有一个整数n。 输出 结果保留2为小数,单独占一行。 样例输入 3 样例输出 0.87注意sum 1相当于sumsum1 注意sum * 1相当于sumsum*1 C语言版 #include<stdio.h> // 包含…

浅析DDOS攻击及防御策略

DDoS&#xff08;分布式拒绝服务&#xff09;攻击是一种通过大量计算机或网络僵尸主机对目标服务器发起大量无效或高流量请求&#xff0c;耗尽其资源&#xff0c;从而导致服务中断的网络攻击方式。这种攻击方式利用了分布式系统的特性&#xff0c;使攻击规模更大、影响范围更广…

深度学习 Pytorch 神经网络的学习

本节将从梯度下降法向外拓展&#xff0c;介绍更常用的优化算法&#xff0c;实现神经网络的学习和迭代。在本节课结束将完整实现一个神经网络训练的全流程。 对于像神经网络这样的复杂模型&#xff0c;可能会有数百个 w w w的存在&#xff0c;同时如果我们使用的是像交叉熵这样…

【回溯】目标和 字母大小全排列

文章目录 494. 目标和解题思路&#xff1a;回溯784. 字母大小写全排列解题思路&#xff1a;回溯 494. 目标和 494. 目标和 给你一个非负整数数组 nums 和一个整数 target 。 向数组中的每个整数前添加 或 - &#xff0c;然后串联起所有整数&#xff0c;可以构造一个 表达式…

Linux系统上安装与配置 MySQL( CentOS 7 )

目录 1. 下载并安装 MySQL 官方 Yum Repository 2. 启动 MySQL 并查看运行状态 3. 找到 root 用户的初始密码 4. 修改 root 用户密码 5. 设置允许远程登录 6. 在云服务器配置 MySQL 端口 7. 关闭防火墙 8. 解决密码错误的问题 前言 在 Linux 服务器上安装并配置 MySQL …

记录一次,PyQT的报错,多线程Udp失效,使用工具如netstat来检查端口使用情况。

1.问题 报错Exception in thread Thread-1: Traceback (most recent call last): File "threading.py", line 932, in _bootstrap_inner File "threading.py", line 870, in run File "main.py", line 456, in udp_recv IndexError: list…

群晖NAS安卓Calibre 个人图书馆

docker 下载镜像johngong/calibre-web&#xff0c;安装之 我是本地的/docker/xxx/metadata目录 映射到 /usr/local/calibre-web/app/cps/metadata_provider CALIBREDB_OTHER_OPTION 删除 CALIBRE_SERVER_USER calibre_server_user 缺省用户名口令 admin admin123 另外有个N…

android主题设置为..DarkActionBar.Bridge时自定义DatePicker选中日期颜色

安卓自定义DatePicker选中日期颜色 背景&#xff1a;解决方案&#xff1a;方案一&#xff1a;方案二&#xff1a;实践效果&#xff1a; 背景&#xff1a; 最近在尝试用原生安卓实现仿element-ui表单校验功能&#xff0c;其中的的选择日期涉及到安卓DatePicker组件的使用&#…

彩色控制台,自动换行...学习个新概念:流操控器![more cpp--11]

孩子们&#xff0c;我回来了。先看看今天我又学了什么CPP的没啥用新特性。彩色的控制台&#xff01; 还有很多的新花样&#xff01; 事情要从去年八月讲起&#xff0c;我那个时候在研究流函数&#xff0c;写了一些比较愚笨的代码。 为什么要研究这个呢&#xff1f;虽然我们的C…

基于单片机的盲人智能水杯系统(论文+源码)

1 总体方案设计 本次基于单片机的盲人智能水杯设计&#xff0c;采用的是DS18B20实现杯中水温的检测&#xff0c;采用HX711及应力片实现杯中水里的检测&#xff0c;采用DS1302实现时钟计时功能&#xff0c;采用TTS语音模块实现语音播报的功能&#xff0c;并结合STC89C52单片机作…

TensorFlow 示例摄氏度到华氏度的转换(一)

TensorFlow 实现神经网络模型来进行摄氏度到华氏度的转换&#xff0c;可以将其作为一个回归问题来处理。我们可以通过神经网络来拟合这个简单的转换公式。 1. 数据准备与预处理 2. 构建模型 3. 编译模型 4. 训练模型 5. 评估模型 6. 模型应用与预测 7. 保存与加载模型 …

win10部署本地deepseek-r1,chatbox,deepseek联网(谷歌网页插件Page Assist)

win10部署本地deepseek-r1&#xff0c;chatbox&#xff0c;deepseek联网&#xff08;谷歌网页插件Page Assist&#xff09; 前言一、本地部署DeepSeek-r1step1 安装ollamastep2 下载deepseek-r1step2.1 找到模型deepseek-r1step2.2 cmd里粘贴 后按回车&#xff0c;进行下载 ste…

【memgpt】letta 课程6: 多agent编排

Lab 6: Multi-Agent Orchestration 多代理协作 letta 是作为一个服务存在的,app通过restful api 通信 多智能体之间如何协调与沟通? 相互发送消息共享内存块,让代理同步到不同的服务的内存块

Java 大视界 -- Java 大数据在自动驾驶中的数据处理与决策支持(68)

&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎来到 青云交的博客&#xff01;能与诸位在此相逢&#xff0c;我倍感荣幸。在这飞速更迭的时代&#xff0c;我们都渴望一方心灵净土&#xff0c;而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识&#xff0c;也…