手把手教你学Python之Numpy学习(一文掌握科学计算库-Numpy)-程序员宅基地

技术标签: python  数据分析  numpy  Python学习  

 

目录

多维数组对象-ndarray

ndarray对象的创建

ndarray对象的主要属性

ndarray对象的主要方法

​索引和切片

Numpy中的通用函数

Numpy中的数学函数

Numpy生成随机数

Numpy中的统计方法

Numpy中其他常用方法

Numpy中的数组运算

Numpy的广播机制

数组间的集合运算

数组的连接

数组的分割


     NumPyNumerical Python)是高性能科学计算数据分析的基础包。它极大的简化了多维数组的操纵和处理,大部分数据处理软件包都依赖于Numpy,例如pandasmatplotlibscikit-learn等。

Numpy的一些特点:

  • NumPy 提供了对数组和矩阵进行快速运算的标准数学函数

  • NumPy 提供了很多矢量运算的接口,比手动用循环实现速度要快很多;NumPy 开放源代码,由许多协作者共同维护开发。

  • ……

Python标准库中默认不包含Numpy,推荐两种安装方式:

  • 使用Anaconda软件,简化包的管理,自带Numpy、matplotlib等数据处理包;

  • 使用pip命令安装:pip  install  numpy

多维数组对象-ndarray

       NumPy 最重要的一个特点是其 维数组对象 ndarray,它是用于存放同类型元素的多维数组,ndarray 中的每个元素在内存中占有相同大小的区域。创建ndarray对象时,可以通过dtype指定数据类型,如果没有指定,则会根据元素内容自动确定

ndarray对象的创建

        创建ndarray的方法很多,例如可通过array()asarray()将列表或元组转化为ndarray,通过arange()生成一组数,通过ones()zeros()full()生成元素相同的一些特殊数组,通过linspace()logspace()分别生成等差和等比数组等,方法详细说明如下:

       注意:指定数组形状时,只能是整数如8、12等表示一维数组中元素的个数或者整数序列如[3,5],(2, 3, 4)等,序列的长度表示维度,每个元素的值表示对应维度上轴的大小

ndarray对象的主要属性

       多维数组对象ndarray的主要属性包括shape(形状)、ndim(维度)、size(元素个数)、dtype(元素类型)、itemsize(每个元素所占字节数)、nbytes(整个数组所占字节数)等。各自含义和用法如下:

ndarray对象的主要方法

        多维数组对象ndarray的主要方法包括reshape(形状)、flatten(将多维数组压平为1维数组)、astype(指定元素类型)、sum(求和)、cumsum(累积求和)、max(求最大)、min(求最小值)、mean(求平均值)等。方法的详细介绍及其用法如下:

索引和切片

       ndarray 对象的索引和切片操作,与序列的索引和切片操作类似。索引支持正向索引从左到右,下标从0开始不断增大反向索引从右到左,下标从-1开始不断减小。切片操作可通过slice函数,设置start、stop和step参数进行;也可以通过冒号分隔切片参数 start:stop:step进行。对于多维数组来说,可以分别对每一个维度进行索引和切片多个维度的索引和切片之间用逗号隔开

        序列进行切片操作后,会生成一个新的序列,相当于是将相应的元素复制出来组成了一个新的序列。与此不同,ndarray切片结果并不会单独生成一个新的ndarray,访问的仍然是原始的ndarray中的数据,因此对切片结果的修改会影响到原始数据

   下面以一个具体例子,来理解索引和切片的用法。

       此外,Numpy中还提供了一些特殊的索引方式,例如整数数组索引布尔索引花式索引

       整数数组索引主要用于同时访问多个无规律的元素,用整数数组作为索引,一个整数数组表示一个维度,有多少个维度就需要多少个整数数组,整数数组中用于存放各元素在这一维度的索引

        布尔索引通过布尔运算来获取符合一定条件的元素,对一个多维数组使用布尔运算时,会对数组中的每一个元素执行布尔运算,最终得到一个元素为True或False的多维数组,然后将这个多维布尔数组作为索引,此时会取出True对应位置上的数据

        花式索引根据索引数组的值作为目标数组的某个轴的下标来取值。对于使用一维整型数组作为索引,如果目标是一维数组,那么索引的结果就是对应位置的元素;如果目标是二维数组,那么就是对应下标的行

       如果需要按照自定义的顺序获取某些行列的数据,可使用np.ix_方法,用法为: a[np.ix_([行序],[列序])]注意和整数数组索引的区别

       Numpy中为我们提供了很多高性能的科学计算和数据分析函数,包括各种各样的数学函数、用于生成随机数特定概率分布样本的函数、统计分析中经常用到的函数以及其他一些常用函数。

Numpy中的通用函数

Numpy中的数学函数

       Numpy中提供的数学函数含义大部分与数学库中的函数一致,当对多维数组执行数学函数时,会对里面的每一个元素执行相应的函数,并将结果保存到相应的位置,简单、高效。实际上,我们完全可以通过循环,使用数据库中的函数实现相同效果,但操作麻烦、性能不高。主要的数学函数及其作用如下:

Numpy生成随机数

       numpy.random模块对Python内置的random进行了补充,增加了一些用于高效生成多种概率分布的样本值的函数。常见的方法如下:

Numpy中的统计方法

       Numpy中提供了大量的用于统计分析的方法,例如求和、求均值、求中位数、求方差、求标准差、求相关系数、去重等等,大部分方法既支持对整体数据运算,也支持对某一个维度进行运算。具体方法及其含义如下:

Numpy中其他常用方法

       此外,Numpy中还有一些好用的方法,例如扩展数组、将数组保存到文件、判断数组中元素是否满足某一条件、对数据进行排序等等。具体方法及其含义如下:

Numpy中的数组运算

Numpy的广播机制

       numpy 中两个数组之间支持加、减、乘、除等算术运算,实际上是对应位置的元素之间的运算。两个形状相同的数组间执行运算容易理解,两个形状不同的数组之间有时也能执行算术运算,此时会对数组进行扩展,使其形状相同,然后再执行算术运算,这种机制叫做广播。但并不是所有的数组之间都能执行算术运算。

       广播的原则:如果两个数组的后缘维度(trailing dimension,即从末尾开始算起的维度)的轴长度相符,或其中的一方的长度为1,则认为它们是广播兼容的。广播会在缺失或长度为1的维度上进行。广播效果如图所示。

    此外,多维数组还可以和标量进行运算,此时会将该标量和数组中的每一个元素执行运算,并将结果进行保存。举例如下:

对数组中的切片进行赋值时,也会根据广播机制,将值传到相应的位置上。这一点和Python中的序列有所不同。

数组间的集合运算

       两个一维数组之间还可以执行常见的集合运算,例如求交集并集异或集等,结果中如果包含重复数据会自动删除多余的数据

  • np.intersect1d(a,b):交集,结果为同时在a和b中的元素组成的数组

  • np.setdiff1d(a,b): 差集,结果为在a中不在b中的元素组成的数组;

  • np.union1d(a,b): 并集,结果为在a或b中的元素组成的数组;

  • np.setxor1d(a,b): 异或集,结果为在a或b中,但不同时在a和b中的元素组成的数组;

  • np.in1d(a,b): 判断a中的元素是否在b中,结果为布尔类型数组

数组的连接

  • np.concatenate((a,b))沿指定轴连接两个或多个数组,要求指定轴上的元素个数相同,默认是按垂直连接,效果和 vstack 效果相同;

  • np.stack ((a,b))沿新轴连接数组序列,数组a和b形状必须相;

  • np.hstack ((a,b))通过水平堆叠来生成数组;

  • np.vstack ((a,b))通过垂直堆叠来生成数组。

数组的分割

  • np.split()沿特定的轴将数组分割为子数组,如果是整数,就用该数平均切分,如果是数组,为沿轴对应位置切分(左开右闭);

  • np.hsplit()用于水平分割数组,通过指定要返回的相同形状的数组数量来拆分原数组

  • np.vsplit()沿着垂直轴分割,其分割方式与hsplit用法相同。

更多关于手把手教你学Python的文章请关注微信公众号:手把手教你学编程。详细的视频讲解可查看 CSDN学院 里的手把手教你学Python系列视频:https://edu.csdn.net/lecturer/5686。    

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Dream_Gao1989/article/details/109081424

智能推荐

使用nginx解决浏览器跨域问题_nginx不停的xhr-程序员宅基地

文章浏览阅读1k次。通过使用ajax方法跨域请求是浏览器所不允许的,浏览器出于安全考虑是禁止的。警告信息如下:不过jQuery对跨域问题也有解决方案,使用jsonp的方式解决,方法如下:$.ajax({ async:false, url: 'http://www.mysite.com/demo.do', // 跨域URL ty..._nginx不停的xhr

在 Oracle 中配置 extproc 以访问 ST_Geometry-程序员宅基地

文章浏览阅读2k次。关于在 Oracle 中配置 extproc 以访问 ST_Geometry,也就是我们所说的 使用空间SQL 的方法,官方文档链接如下。http://desktop.arcgis.com/zh-cn/arcmap/latest/manage-data/gdbs-in-oracle/configure-oracle-extproc.htm其实简单总结一下,主要就分为以下几个步骤。..._extproc

Linux C++ gbk转为utf-8_linux c++ gbk->utf8-程序员宅基地

文章浏览阅读1.5w次。linux下没有上面的两个函数,需要使用函数 mbstowcs和wcstombsmbstowcs将多字节编码转换为宽字节编码wcstombs将宽字节编码转换为多字节编码这两个函数,转换过程中受到系统编码类型的影响,需要通过设置来设定转换前和转换后的编码类型。通过函数setlocale进行系统编码的设置。linux下输入命名locale -a查看系统支持的编码_linux c++ gbk->utf8

IMP-00009: 导出文件异常结束-程序员宅基地

文章浏览阅读750次。今天准备从生产库向测试库进行数据导入,结果在imp导入的时候遇到“ IMP-00009:导出文件异常结束” 错误,google一下,发现可能有如下原因导致imp的数据太大,没有写buffer和commit两个数据库字符集不同从低版本exp的dmp文件,向高版本imp导出的dmp文件出错传输dmp文件时,文件损坏解决办法:imp时指定..._imp-00009导出文件异常结束

python程序员需要深入掌握的技能_Python用数据说明程序员需要掌握的技能-程序员宅基地

文章浏览阅读143次。当下是一个大数据的时代,各个行业都离不开数据的支持。因此,网络爬虫就应运而生。网络爬虫当下最为火热的是Python,Python开发爬虫相对简单,而且功能库相当完善,力压众多开发语言。本次教程我们爬取前程无忧的招聘信息来分析Python程序员需要掌握那些编程技术。首先在谷歌浏览器打开前程无忧的首页,按F12打开浏览器的开发者工具。浏览器开发者工具是用于捕捉网站的请求信息,通过分析请求信息可以了解请..._初级python程序员能力要求

Spring @Service生成bean名称的规则(当类的名字是以两个或以上的大写字母开头的话,bean的名字会与类名保持一致)_@service beanname-程序员宅基地

文章浏览阅读7.6k次,点赞2次,收藏6次。@Service标注的bean,类名:ABDemoService查看源码后发现,原来是经过一个特殊处理:当类的名字是以两个或以上的大写字母开头的话,bean的名字会与类名保持一致public class AnnotationBeanNameGenerator implements BeanNameGenerator { private static final String C..._@service beanname

随便推点

二叉树的各种创建方法_二叉树的建立-程序员宅基地

文章浏览阅读6.9w次,点赞73次,收藏463次。1.前序创建#include<stdio.h>#include<string.h>#include<stdlib.h>#include<malloc.h>#include<iostream>#include<stack>#include<queue>using namespace std;typed_二叉树的建立

解决asp.net导出excel时中文文件名乱码_asp.net utf8 导出中文字符乱码-程序员宅基地

文章浏览阅读7.1k次。在Asp.net上使用Excel导出功能,如果文件名出现中文,便会以乱码视之。 解决方法: fileName = HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8);_asp.net utf8 导出中文字符乱码

笔记-编译原理-实验一-词法分析器设计_对pl/0作以下修改扩充。增加单词-程序员宅基地

文章浏览阅读2.1k次,点赞4次,收藏23次。第一次实验 词法分析实验报告设计思想词法分析的主要任务是根据文法的词汇表以及对应约定的编码进行一定的识别,找出文件中所有的合法的单词,并给出一定的信息作为最后的结果,用于后续语法分析程序的使用;本实验针对 PL/0 语言 的文法、词汇表编写一个词法分析程序,对于每个单词根据词汇表输出: (单词种类, 单词的值) 二元对。词汇表:种别编码单词符号助记符0beginb..._对pl/0作以下修改扩充。增加单词

android adb shell 权限,android adb shell权限被拒绝-程序员宅基地

文章浏览阅读773次。我在使用adb.exe时遇到了麻烦.我想使用与bash相同的adb.exe shell提示符,所以我决定更改默认的bash二进制文件(当然二进制文件是交叉编译的,一切都很完美)更改bash二进制文件遵循以下顺序> adb remount> adb push bash / system / bin /> adb shell> cd / system / bin> chm..._adb shell mv 权限

投影仪-相机标定_相机-投影仪标定-程序员宅基地

文章浏览阅读6.8k次,点赞12次,收藏125次。1. 单目相机标定引言相机标定已经研究多年,标定的算法可以分为基于摄影测量的标定和自标定。其中,应用最为广泛的还是张正友标定法。这是一种简单灵活、高鲁棒性、低成本的相机标定算法。仅需要一台相机和一块平面标定板构建相机标定系统,在标定过程中,相机拍摄多个角度下(至少两个角度,推荐10~20个角度)的标定板图像(相机和标定板都可以移动),即可对相机的内外参数进行标定。下面介绍张氏标定法(以下也这么称呼)的原理。原理相机模型和单应矩阵相机标定,就是对相机的内外参数进行计算的过程,从而得到物体到图像的投影_相机-投影仪标定

Wayland架构、渲染、硬件支持-程序员宅基地

文章浏览阅读2.2k次。文章目录Wayland 架构Wayland 渲染Wayland的 硬件支持简 述: 翻译一篇关于和 wayland 有关的技术文章, 其英文标题为Wayland Architecture .Wayland 架构若是想要更好的理解 Wayland 架构及其与 X (X11 or X Window System) 结构;一种很好的方法是将事件从输入设备就开始跟踪, 查看期间所有的屏幕上出现的变化。这就是我们现在对 X 的理解。 内核是从一个输入设备中获取一个事件,并通过 evdev 输入_wayland

推荐文章

热门文章

相关标签