python科学计算_可视化图解Python科学计算包NumPy

e2318aaff7a2070928c2796bd0d3c9e8.png

4e2b0b3290409ec9f6690f1cc5030ebf.png

NumPy包是python生态系统中数据分析、机器学习和科学计算的主力。 它极大地简化了向量和矩阵的操作。Python的一些主要软件包依赖于NumPy作为其基础架构的基础部分(例如scikit-learn、SciPy、pandas和tensorflow)。我们将介绍一些使用NumPy的主要方法,以及在我们为机器学习模型提供服务之前它如何表示不同类型的数据(表格、声音和图像)。

import numpy as np

一、数组操作

1.1创建数组

通过将python列表传递给NumPy对象,使用np.array()创建一个NumPy数组(即ndarray)。 Python创建了我们在右边可以看到的数组:

e46e17f0f2410052b20e66f546c300f8.png

一般情况,我们希望直接使用NumPy作为初始化的数组数据。 NumPy为这些情况提供了诸如ones(),zeros()和random.random()类等方法。 我们只需要向这些方法传递要生成的元素数量的参数:

dac2cdb3ff88784317874a2c90b77b83.png

一旦我们创建了数组,我们就可以开始以有趣的方式操作它们。

1.2 数组算术

先来创建两个NumPy数组来展示它们的用处。 我们称之为data和ones:

6b87d36d10895063bd0776cdc7045204.png

这两个数组的加法就像我们+1那么简单(每一行相加)。

dfee48d9b2578959f6e4a21e7249c125.png

可以发现这样的计算不必在循环中实现。 这是非常好的抽象处理,可以让你在更高层次上思考问题,而不是陷入如何实现计算的算法里面。

我们还可以像下面一样进行其他运算:

5f0c77d72626302be3d95d9da09dadc0.png

通常情况下,我们希望在数组和单个数字之间执行操作(我们也可以将其称为向量和标量之间的操作)。 比如说,我们的数组表示以英里为单位的距离,我们希望将其转换为公里数。 我们只需要让数据* 1.6就可以了。

3b2d776eb44f8d9d71b0c4488d619ca7.png

NumPy让每个单元格都会发生相乘叫做广播。

1.3索引数组

我们可以索引、切片NumPy数组。

ad20daf9a1e0a7b9615a7740ad818321.png

1.4 数组聚合

NumPy为我们提供非常好用的聚合功能:

3c251b12dd9d377861e2590a4b0e21bf.png

除了最小值、最大值和总和之外,还得到非常棒的东西,比如平均值、所有元素相乘的结果、标准差,以及其他很多。

二、多维处理

2.1 创建矩阵

所有的例子都在一个维度上处理向量。 NumPy的厉害之处是能够将我们目前所看到的所有内容应用到任意维度上。我们可以传递一个Python列表,让NumPy创建一个矩阵来表示它们:

np.array([[1,2],[3,4]])

bbf59f1fc32f4d2e346bf5e1a3b343cf.png

我们也可以使用上面提到的相同方法(ones(),zeros()和random.random()),只要我们给它们一个元组来描述我们正在创建的矩阵的维度:

6d7753982892464242145fb17594cff0.png

2.2 矩阵算术

如果两个矩阵的大小相同,我们可以使用算术运算符(+ – * /)来进行矩阵计算。NumPy将这些作为位置操作处理:

7008fa1160f80f5e4fd138ed4b6d073c.png

只有当不同维度为1时(例如矩阵只有一列或一行),我们才能在不同大小的矩阵上进行这些算术运算,在这种情况下,NumPy将其广播规则用于该操作:

f6a0dd1033c4b5a0b7f97bef7990c16d.png

2.3 点积

NumPy为每个矩阵提供了一个dot()方法,我们可以用它来执行与其他矩阵的点积运算:

d6f60a822bae5a5ff34c77b1d15b648a.png

两个矩阵在它们彼此面对的一侧必须具有相同的尺寸(上图底部红色的数字)。

您可以将此操作可视化为如下所示:

7e7096c87ed7c1a34f45354004b7c16d.png

2.4 矩阵索引

当我们操作矩阵时,索引和切片操作变得更加有用:

bf89e05df5e27393c3667f8e61858d17.png

冒号表示从哪个位置到哪个位置,留空表示开头或者结尾;逗号表示行和列。NumPy的索引是从0开始的,并且后面的方括号是不包含后面的值(即小于后面的值)。

2.5 矩阵聚合

我们可以像聚合向量一样聚合矩阵:

284e2208177581ce85e5cb2d8876ca47.png

我们不仅可以聚合矩阵中的所有值,还可以使用axis参数在行或列之间进行聚合:

80d9566ff1183ad34dd30c99e97e80e9.png

2.6 转置和重塑

处理矩阵时的一个共同需求是需要旋转矩阵。 当我们需要采用两个矩阵的点积并需要对齐它们共享的维度时,通常就是这种情况。 NumPy数组有一个方便的属性叫做T来获得矩阵的转置:

7605db922d688f9f075b946d36f5e27f.png

在更高级的应用中,您可能会发现自己需要切换某个矩阵的维度。 在机器学习应用程序中通常就是这种情况,其中某个模型期望输入的某个形状与您的数据集不同。 在这些情况下,NumPy的reshape()法很有用。 您只需将矩阵所需的新尺寸传递给它即可。

f72b94c4fefcc3cfa6f0b852696406e6.png

2.7 更多维度

NumPy可以完成我们在任何维度定义数据。 其中心数据结构称为ndarray(N维数组)。

7a03f10b6967fdf9b7cae5cd2add0b85.png

在很多方面,处理新维度只需在NumPy函数的参数中添加逗号:

79e6bccdb242ab4fce336f2321b64c60.png

三、公式计算

我们举一个计算均方误差的例子。实现适用于矩阵和向量的数学公式是考虑NumPy的关键用例。例如均方误差MSE公式,它是监督机器学习、模型处理、回归问题的核心公式:

在NumPy中实现这一点是轻而易举的:

e656a212f6c6436ed2255e7bf2ded1fc.png

这样做的好处是我们不需要关心predictions和labels是否包含一个或一百个值(只要它们的大小相同)。我们可以通过一个示例逐步执行该代码行中的四个操作:

1c1d336ebd5e46008594e6e265e5805b.png

predictions和labels向量都包含三个值。 这意味着n的值为3。 在我们执行减法后,我们最终得到如下值:

d32a26cae9719134d16a8efeddf3eadf.png

然后我们可以对矢量中的值进行平方:

0c2fae4684eba11a36259f4a58b614d2.png

然后求和:

a11d73a5f754252eb8bae67bd32699fe.png

结果就是均方误差。

四、数据表示

4.1 表格和电子表格

构建模型所需的所有数据类型(电子表格、图像和音频等),很多都非常适合在n维数组中表示。

电子表格或值表是二维矩阵。 电子表格中的每个工作表都可以是自己的变量。 Python中最受欢迎的抽象是pandas数据帧DataFrame,它实际上使用NumPy并在其上构建。

5cdc8c7a960b1cd15f4d18f947b6d07a.png

4.2 音频

音频文件是一维样本数组。 每个样本都是一个代表音频信号的一小部分的数字。 CD质量的音频每秒可能有44,100个样本,每个样本是-65535到65536之间的整数。这意味着如果你有一个10秒的CD质量的WAVE文件,你可以将它加载到长度为10 * 44,100的NumPy数组中 = 441,000个样本。 想要提取音频的第一秒? 只需将文件加载到我们称之为audio的NumPy数组中,然后获取audio[:44100]。

以下是一段音频文件:

32202902219a260e52a66951f2e2d161.png

4.3 图像

图像是高度×宽度的像素矩阵。如果图像是黑白的(即灰度),则每个像素可以由单个数字表示(通常在0(黑色)和255(白色)之间)。

想要裁剪图像的左上角10 x 10像素部分? 告诉NumPy让你image[:10,:10]。

这是一个图像文件的片段:

87439725d576661891381087dd85deb7.png

如果图像是彩色的,则每个像素由三个数字表示(RGB)。 在这种情况下,我们需要第三维(因为每个单元格只能包含一个数字)。 因此彩色图像由尺寸的ndarray表示:(高x宽x 3)。

a7c1292a54220be529237bca0741d857.png

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

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

相关文章

php 导出excel 特殊字符,PHPEXCEL导出,存在特殊字符遇到的问题

[13] > Array([payment_success_at] >[user_name] > ?.琳琳?[remarks] >[product_name] > 香菇[sku_name] > 斤[product_property] > 斤[price_original] > 5.50[price_current] > 5.50[consignee] > ?.琳琳?)以上代码中用户名中存在特殊符号…

win10任务栏怎么还原到下面_详解:新版 WIN 10 V2004 任务栏和开始菜单全透明

是不是很酷炫?继续往下看,你也可以简单做到导语本文将告诉你如何借助一个小工具,将最新版 WIN 10 开始菜单和任务栏设置成全透明,以获得超酷的视觉体验。安装和设置都很简单,关键是一定要找到适合 WIN 10 版本的 Start…

10.8.8.8柠檬wifi网页登录_基于企业邮箱进行wifi实名认证的方案

之前我们介绍过如何用钉钉认证和企业微信认证来实现企业内部的实名上网认证。此外邮箱认证也是企业进行wifi实名认证的一个有效手段。因为很多企业都给员工开通了企业邮箱,直接让员工输入邮箱账号和密码进行认证上网。配置、使用和维护都相对比较简单。本文我将介绍…

php tire树,Immutable.js源码之List 类型的详细解析(附示例)

本篇文章给大家带来的内容是关于Immutable.js源码之List 类型的详细解析(附示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。一、存储图解我以下面这段代码为例子,画出这个List的存储结构:let myL…

nodejs missing script: dev_nodejs深入学习系列之v8基础篇

V8这个概念大家都不陌生了,那么你动手编译过V8源码吗?编译后有尝试去了解V8背后的一些概念吗?如果没有,那么也不用心慌,下文将跟大家一一解释这些东西。在编译V8之前我们先要了解一个东西-构建系统1、构建系统1.1、构建…

cmos存储器中存放了_天津大学姚建铨院士,张雅婷副教授JMCC:具有宽光谱调控特性的阻变存储器...

【引言】存储器是计算机中数据存放的主要介质。随着5G时代到来,带动人工智能、物联网、智慧城市等应用市场发展并向存储器提出多样化需求,加上传统存储器市场价格变化等因素,新型存储器将在市场发挥越来越重要的作用。因此具有存储密度更高&a…

matlab转差频率控制,转差频率控制的异步电机调速系统的研究

1 引言交流变频调速的方法是异步电机最有发展前途的调速方法。随着电力电子技术、计算机技术和自动控制技术的不断发展,交流电机变频调速已经逐步取代直流电机调速,并经历了采用电压频率协调控制、转差频率控制、矢量控制以及直接转矩控制的发展过程。其…

oracle错误1327,Oracle中的PGA监控报警分析(r11笔记第97天)

最近接到一个数据库报警,让我颇有些意外,这是一个PGA相关的报警。听起来感觉是应用端的资源调用出了问题。报警内容大体如下:报警内容: PGA Alarm on alltest------------------------------------报警级别: PROBLEM------------------------…

php函数内的循环,PHP 循环列出目录内容的函数代码

PHP 循环列出目录内容的函数代码复制代码 代码如下:function list_files($dir){if(is_dir($dir)){if($handle opendir($dir)){while(($file readdir($handle)) ! false){if($file ! "." && $file ! ".." && $file ! "Thumbs.db&quo…

python火柴人打架代码_python火柴人

广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 代码实现了一个火柴人,他开心时可以跳跃、可以舞蹈,不开心时可以躺地上... ?代码有…

spring boot admin 2.2 获取日志失败_SB实战20-Spring Boot的日志和报告

上篇我们学习了《SB实战19-Spring Boot的外部配置》,本篇我们学习Spring Boot的日志和报告。4 日志和报告4.1 日志日志是对应用运行时进行调试和分析的重要工具。Spring Boot使用SLF4J作为日志的API,Logback、Log4j2、Java Util Logging都可以作为日志提…

sqlserver date类型和字符串比较_基于SQL Server数据库搭建主从复制实现读写分离实战演练...

一、课程介绍读写分离(主从同步)从字面意思就可以理解,就是把对数据库的读操作和写操作分离开。读写分离在网站发展初期可以一定程度上缓解读写并发时产生锁的问题,将读写压力分担到多台服务器上。读写分离的基本原理是让主数据库处理事务性增、改、删操…

linux非标准头文件,Linux学习:unix的标准化的实现(Linux中各种限制-数据类型-各种标准化头文件介绍)...

作为Linux的前身,unix标准化是十分重要的。我在这里挑几个重要的点说明。1:Linux中各种限制。Linux中限制有编译时限制和运行时限制,另外有一些限制是由于我们的实现不同而不同,因此我们需要调用对应的函数获取对应的值不同。(eg&…

51单片机怎么显示当前时间_(进阶篇)51单片机之按键控制蜂鸣器、数码管、按键值移位显示...

一、实操演示- 按键控制蜂鸣器1、图文详细独立按键硬件电路蜂鸣器硬件电路2、连接方式:J20的第3号引脚连接到J7引脚,即P15连接J7。J29的第7、8号引脚连接到JP1的第1、2号引脚,即P31连接k1,P30连接k2。下载程序后,观察现…

linux怎么运行g77,Linux安装g77编译器的技巧

在Ubuntu10.10系统中,g77已经被gfortran完全替代了,但并不能完全兼容过去的g77,这样就不能使用一些用977编译的程序了。所以我们只能自己再安装g77了。今天华军小编给大家展示的是Linux安装g77编译器的技巧,精心挑选的内容希望大家…

vs使用未初始化的内存怎么解决_遇到C语言内存错误怎么办?一定要找准这六个原因...

一、没有为指针分配内存定义了指针变量,但是没有为指针分配内存,即指针没有指向一块合法的内存。浅显的例子就不举了,这里举几个比较隐蔽的例子。1、结构体成员指针未初始化struct student { char *name; int score; }stu,*pstu; int main() …

cad求和插件_黑科技 | 无BIM建模下平面CAD自动生成门窗表

如果你接到的施工图既不是用天正出的,也不是用revit出的,还得统计门窗表,那么你需要读完这篇文章。为了能够让自己和所有底层同行们从这项无脑又烧脑的机械劳动中解脱,C君近期利用茶余饭后的时间开发了一个小插件,可以…

linux数据库实例开机启动,linux下数据库实例开机自启动设置

linux下数据库实例开机自启动设置 1、修改/oratab [rootorg54 ~]# vi/etc/oratab --把N改为Y,如下提示 # This file is used by ORACLEutilities. It is created by root.sh # and updated by the Database ConfigurationAssistant when creating # a datablinux下数…

tensorboard ckpt pb 模型的输出节点_算法工程化系列——模型固化

摘要基于tensorflow训练的模型一般被保存为ckpt形式的文件,随着当前深度学习模型网络越来越大,对应模型也会非常大。当对外提供服务的时候,如果采用ckpt的形式,服务进程被调起来非常困难,且推理服务一般速度也较慢(会达…

深度linux内核升级,深度操作系统 2020.11.11 更新发布:内核升级

原标题:深度操作系统 2020.11.11 更新发布:内核升级IT之家11月11日消息 今日,深度操作系统宣布2020.11.11 更新现已发布。本次更新包括升级内核、Debian 10.6 仓库以及系统安全性更新。系统安全方面,本次更新修复了 Firefox-ESR 安…