Python科学计算之生成数据

文章目录

    • 生成序列
    • 创建网格
    • 创建特殊数组
    • 随机数组

Python科学计算系列:数组

正所谓巧妇难为无米之炊,没有数据,也就没法对数据进行分析,从而数值计算也就成了无根之木了。所以,在学习具体的数值计算方法之前,先介绍几种特殊数据的生成方法。

生成序列

在科学计算时,会经常遇到生成序列的需求,比如前面演示差分、累加时就通过arange生成了一组自然数列。并且为了让相邻元素间隔 0.1 0.1 0.1,还在后面除以10。然而,arange这个函数,其实是有能力生成间隔为0.1的序列的。

此外,【linspace】也可以生成等差数列,二者区别如下

  • linspace(a,b,N) [ a , b ] [a,b] [a,b]中间生成 N N N个值, N N N默认为50
  • arange(a,b,delta) [ a , b ) [a,b) [a,b)之间,以 δ \delta δ为间隔生成值, δ \delta δ默认为1

所以,若想实现 [ 0 , 10 ) [0,10) [0,10)之间间隔为0.1的等差数列,这两个函数都可以做到,但需注意,linspace函数对两个端点默认是封闭的。

x = np.arange(0,10,0.1)
x = np.linspace(0,9.9,100)
x = np.linspace(0,10,100,endpoint=False)

除了等差数列之外,【logspace】和【geomspace】函数,可生成等比数列,二者区别如下

  • logspace(a,b,N,base=c) [ c a , c b ] [c^a, c^b] [ca,cb] 之间等比生成N个值
  • geomspace(a,b,N,base=c) [ a , b ] [a,b] [a,b]之间,等比生成N个值

base参数可表示对数的底。取 a = 1 , b = 2 , N = 20 a=1, b=2, N=20 a=1,b=2,N=20,二者差别如下

在这里插入图片描述

绘图代码为

import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(1,2,20)
y = {"logspace" : np.logspace(1,2,20),
"geomspace" : np.geomspace(1,2,20)}

fig = plt.figure()
for i,key in zip([1,2],y.keys()):
    ax = fig.add_subplot(1,2,i)
    ax.plot(x,y[key],marker="*")
    ax.set_title(key)

plt.show()

创建网格

在三维图的绘制过程中,一般需要 x , y , z x,y,z x,y,z之间的对应关系,但对于图像而言,其 x , y x,y x,y轴坐标是体现在像素栅格中的,从而图像矩阵中的像素强度,其实表示的是 z z z轴的坐标,这种情况下如果想绘制三维散点图,就需要生成图像像素对应的坐标网格。

这种网格形式大致如下,其中 x v x_v xv y y y轴不变,而 x x x轴等差增长,与坐标轴等比例映射, y v y_v yv同理。

x v = [ 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 ] y v = [ 0 0 0 0 1 1 1 1 2 2 2 2 3 3 3 3 ] x_v=\begin{bmatrix} 1&2&3&4\\1&2&3&4\\1&2&3&4\\1&2&3&4\\ \end{bmatrix}\quad y_v=\begin{bmatrix} 0&0&0&0\\1&1&1&1\\2&2&2&2\\3&3&3&3\\ \end{bmatrix} xv= 1111222233334444 yv= 0123012301230123

【meshgrid】是Python中最常用的坐标网格生成函数,可将输入的 x , y x,y x,y变量,向 y y y轴和 x x x轴方向进行扩张。如想生成 x v , y v x_v, y_v xv,yv,方法如下

x = [1,2,3,4]
y = [0,1,2,3]
xv, yv = np.meshgrid(x, y)

【mgrid】比meshgrid更加简单,可以直接通过魔法函数用索引语法来生成坐标网格,

yv, xv = np.mgrid[:4, 1:5]

np.mgrid[1:5]       # [1, 2, 3, 4]
np.mgrid[1:10:5]    # [1, 6]
np.mgrid[1.1:10]    # [1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 8.1, 9.1]

如果翻阅源码,会发现mgrid是MGridClass的一个实例,MGridClass则是nd_grid的一个子类,在nd_grid中,实现了__getitem__这个魔法函数,从而支持方括号语法来生成数据。。

【ogrid】的用法与mgrid相同,同样是nd_grid的子类,但生成的数组不同,直接看案例

x,y = ogrid[0:5,0:5]

其中, x = [ 0 , 1 , 2 , 3 , 4 ] T x=[0,1,2,3,4]^T x=[0,1,2,3,4]T y = [ 0 , 1 , 2 , 3 , 4 ] y=[0,1,2,3,4] y=[0,1,2,3,4]

如果想干脆一点,只是生成从0开始的等间隔的坐标网格,那么这里最推荐的是【indices】,这个函数只需输入维度,就可以完成网格的创建。

创建特殊数组

numpy提供了一系列函数用以生成特殊数组,列表如下。所有这些函数中,都有一个可选参数dtype,表示创建的数组的数据类型。

类别函数
指定维度empty, ones, zeros, full, eye, identity
模仿维度empty_like, ones_like, zeros_like, full_like
特殊矩阵diag, diagflat, tri, tril, triu, vander

【empty】生成指定维度的空数组。

【ones】, 【zeros】和【full】生成所有元素都相同的数组,顾名思义,前两者分别是全1和全0的数组,而full可通过参数fill_value来指定填充的数值。

以【_like】为后缀的函数,表示生成一个和输入数组维度相同的数组,例如,np.ones_like(x)等价于np.ones(x.shape)

np.ones(3)              #生成全1的3x1数组
np.zeros([2,3])         #生成全0的2x3数组
x = np.full([2,4], 5)   #生成元素均为5的2x4数组
y = np.full_like(x, 6)

【eye】和【identity】都是生成对角为1,其他元素为0的矩阵,区别在于,前者只能生成单位矩阵,即方阵;后者则无此要求。【diagflat】和【diag】用于生成对角矩阵,这几种矩阵的区别如下。

在这里插入图片描述

【diag】在diagflat基础上,还可以提取对角元素,例如

np.diag(np.ones([3,3])) #提取对角元素 [1., 1., 1.]

【tri(M,N,k)】用于生成M行N列的三角阵,其元素为0或者1,k用于调节$0和 1 1 1的分界线相对于对角线的位置,下图中,红色表示 1 1 1,蓝色表示 0 0 0.

在这里插入图片描述

【tril, triu】可用于提取出矩阵的左下和右上的三角阵,其输入参数除了待提取矩阵之外,另一个参数与tri中的k相同,把x设为

x = np.arange(20).reshape(4, 5)

triltriu作用在x上的效果分别如下,二者分别把右上角和左下角的值变成了0。

在这里插入图片描述

【vander】可通过给定的 α i \alpha_i αi生成范德蒙德矩阵。对于 m × ( n + 1 ) m\times(n+1) m×(n+1)的范德蒙德矩阵 V V V,其矩阵元可表示为对可表示为 V i j = α i j V_{ij}=\alpha_i^j Vij=αij,示例如下

x = np.array([1, 2, 3, 5])
V = np.vander(x, increasing=True)

其结果为

V = [ 1 1 1 1 1 2 4 8 1 3 6 9 1 5 25 125 ] V=\begin{bmatrix} 1&1&1&1\\1&2&4&8\\1&3&6&9\\1&5&25&125 \end{bmatrix} V= 1111123514625189125

随机数组

numpy中提供了【random】模块,可用于随机数组的生成,其中又以【rand】函数最为常用,其使用频次仅次于arange。

一个更加规范的随机数创建过程,往往需要指定随机数种子,以便于复现。

np.random.seed(42)
np.random.rand(2,2)

其返回值如下。

[ 0.37454012 0.95071431 0.73199394 0.59865848 ] \begin{bmatrix} 0.37454012&0.95071431\\ 0.73199394&0.59865848 \end{bmatrix} [0.374540120.731993940.950714310.59865848]

众所周知,我们所调用的随机数,其实是伪随机数,本质是查阅随机数表。而【seed】函数,可以理解为查阅这个表的起始位置,所以这个数指定了,那么后期所有的“随机数”的值也就确定了。

除了numpy之外,Python标准库【random】也提供了随机数表,即可用于随机数的生成,但其输出仅为浮点数,示例如下

import random
random.seed(42)
random.random()
# 0.6394267984578837

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【算法 高级数据结构】树状数组:一种高效的数据结构(一)

🚀个人主页:为梦而生~ 关注我一起学习吧! 💡专栏:算法题、 基础算法~赶紧来学算法吧 💡往期推荐: 【算法基础 & 数学】快速幂求逆元(逆元、扩展欧几里得定理、小费马定理&#x…

【详识C语言】自定义类型之一:结构体

本文重点 结构体 结构体类型的声明 结构的自引用 结构体变量的定义和初始化 结构体内存对齐 结构体传参 结构体实现位段(位段的填充&可移植性) 结构体 结构体的声明 结构的基础知识 结构是一些值的集合,这些值称为成员变量。结构的每个…

21、状态模式(行为性模式)

版本一、get状态指针 #include <iostream> using namespace std;//前置声明 class Context;//状态 class State{ public://4个状态virtual void toUp (Context& context){ }virtual void toDown (Context& context){ }virtual void toLeft (Context& cont…

Linux报错排查-刚安装好的ubuntu系统无法ssh连接

Linux运维工具-ywtool 目录 一.问题描述二.问题解决2.1 先给ubuntu系统配置阿里云源2.2 安装openssh-server软件2.3 在尝试ssh连接,可以连接成功了 三.其他命令 一.问题描述 系统:ubuntu-18.04-desktop-amd64 系统安装完后,想要通过xshell软件连接系统,发现能Ping通系统的IP,但…

视频水印怎么轻松去除?这三款神器让您直呼过瘾!

在现代社会&#xff0c;视频内容日益丰富多样&#xff0c;但有时我们更希望获得视频中的文字文稿&#xff0c;以便于搜索、编辑或传播。下面我将为您介绍三款优秀的视频转文字工具&#xff0c;它们能够帮助您快速、准确地将视频内容转换为可编辑的文字格式。让我们一起来看看这…

STM32的启动流程分析 和 一些底层控制的原理

阅读引言&#xff1a; 阅读本文之后&#xff0c; 你将对单片机&#xff0c; 甚至是嵌入式系统&#xff0c; 或者是传统的PC机系统的启动流程有一个大致的了解&#xff0c; 本文更加偏向于单片机的启动流程分析。 目录 一、基础知识 1.STM32系列的微控制器&#xff08;mcu&…

【打工日常】使用docker部署IT运维管理平台CAT

​一、CAT介绍 CAT是一个专为 IT 运维从业者打造的一站式解决方案平台&#xff0c;包含资产管理、工单、工作流、仓储等功能模块。 本项目是celaraze/chemex重构版&#xff0c;原项目chemex名称弃用&#xff1b;CAT采用全新架构设计&#xff0c;大量提升使用体验的细节&#xf…

拼多多1000元虚拟店铺免4万保证金

众所周知拼多多现在流量非常大&#xff0c;虚拟也算是蓝海&#xff0c;想做的人大部分都被保证金拦在门外&#xff0c;高达4W的保证金不是每个人都能承受的&#xff0c;正好在当下有一个方法可以解决这个苦恼。 拼多多虚拟店铺免保证金玩法现在处于前期阶段&#xff0c;很多人…

付强:基于注意力机制的听觉前端处理 | 嘉宾公布

一、智能家居与会议系统专题论坛 智能家居与会议系统专题论坛将于3月28日同期举办&#xff01; 智能会议系统它通过先进的技术手段&#xff0c;提高了会议效率&#xff0c;降低了沟通成本&#xff0c;提升了参会者的会议体验。对于现代企业、政府机构和学术界是不可或缺的。在这…

5款免费且出色的ai智能ppt制作软件,值得拥有!

如果说2023是AI崛起的元年&#xff0c;那2024无疑是AI应用的真正元年&#xff0c;人们对AI技术逐渐回归理性&#xff0c;关注的焦点也从产品层转向应用层&#xff0c;探索AI如何更好地赋能业务&#xff0c;或是重塑工作流程&#xff0c;让AI真正为自己所用。 在数字化盛兴的当…

如何利用生成式人工智能助力短视频剧本创作?

短视频已成为现代人获取娱乐和信息的一种流行方式。不同于传统的电影和电视剧&#xff0c;短视频的时长通常较短&#xff0c;内容形式多样&#xff0c;更适合快节奏的社会生活。本文将讨论如何编写短视频剧本&#xff0c;以及它与传统故事在结构和内容上的区别。 简介 短视频剧…

docker拉取镜像失败的解决方案大全

更换国内源 创建或修改 /etc/docker/daemon.json 文件&#xff0c;修改&#xff1a; {"registry-mirrors" : ["https://registry.docker-cn.com","http://hub-mirror.c.163.com","https://docker.mirrors.ustc.edu.cn","https:…

图文并茂的讲清楚Linux零拷贝技术

今天我们来聊一聊Linux零拷贝技术&#xff0c;今天我们以一个比较有代表性的技术sendfile系统调用为切入点&#xff0c;详细介绍一下零拷贝技术的原理。 1.零拷贝技术简介 Linux零拷贝技术是一种优化数据传输的技术&#xff0c;它可以减少数据在内核态和用户态之间的拷贝次数&…

c8t6,hal库,pwm输出

1.cubemx配置 设置分配系数&#xff1a;71&#xff1b; 自动重装在计数值&#xff1a;499&#xff1b; 72MHZ/(711) 1MHZ&#xff1b; 1MHZ即1秒计数1000000次&#xff1b; 即1毫秒计数1000次&#xff1b; 自动重装载计数值设置为499&#xff1b;即0.5ms一个周期&#xff…

新方法简单无成本申请网易云/腾讯音乐人

外面接单申请的音乐人是原创音乐人&#xff0c;通过这个方法申请的只是翻唱音乐人 如果你不想通过音乐平台赚钱的话&#xff0c;其实这两个音乐人都没什么区别 无非就是原创音乐人多了个作词、作曲的标签 翻唱音乐人一样可以领酷狗会员 音乐人特权&#xff1a; 酷狗音乐人…

@require_PUTNameError: name ‘require_PUT‘ is not defined 解决方法

require_PUT 是一个自定义的装饰器&#xff0c;它在你的Django项目中并不存在。在Django中&#xff0c;没有内置的 require_PUT 装饰器&#xff0c;但你可以使用 require_http_methods 装饰器来限制视图函数接受的HTTP请求方法。 你可以将 require_PUT 替换为 require_http_me…

SPFA找负环

2024-01-31&#xff08;最短路径&#xff09;-CSDN博客 求负环的常用方法&#xff0c;基于spfa&#xff1a; 1.统计每个点入队的次数&#xff0c;如果有个点入队n次&#xff0c;则说明存在负环 2.统计当前每个点的最短路中包含的边数&#xff0c;如果某个点的最短路的所包含的边…

2024年新版CMS内容管理使用,不用回退老版本 使用最新小程序云开发cms内容模型

一&#xff0c;问题描述 最近越来越多的同学找石头哥&#xff0c;说cms用不了&#xff0c;其实是小程序官方最近又搞大动作了&#xff0c;偷偷的升级的云开发cms&#xff08;内容管理&#xff09;以下都称cms&#xff0c;不升级不要紧&#xff0c;这一升级&#xff0c;就导致我…

uniapp列表进入动画

一、目前使用的是uni-list-chat的uniapp组件,可以自己定义的样式 <template><view class="container"><uni-list-chat title="uni-app" avatar="https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/unicloudlogo.png"note=&quo…

Linux 网络监控工具

企业依靠其网络基础设施向客户和最终用户提供数字服务&#xff0c;这些环境包括 Windows 和 Linux 网络设备。与 Windows 网络相比&#xff0c;带有 GUI 的 Windows 网络相对易于管理&#xff0c;而 Linux 网络提供了更大的灵活性和高级级别的自定义。 由于操作系统有助于部署…