找回密码
 立即注册
搜索

Python进阶之NumPy疾速入门(一)

前言

NumPy是Python的一个扩展库,担任数组和矩阵运转。相较于传统Python,NumPy运转效率高,速度快,是应用Python处理数据必不可少的工具

这个NumPy疾速入门系列分为四篇,包含了NumPy大部分基础知识,每篇阅读工夫不长,但内容含量高。大家最好亲身码一遍代码,这样可以更有播种。



概要

    轻松看法和安装NumPy,对NumPy建立一个良好印象。掌握NumPy的各种属性,让运用数组变得得心应手。学会三种创建数组方法,让创建数组变得轻而易举。
第一节.NumPy安装和引见

NumPy安装

我们提供两种命令安装方法,都非常简便:
    pip命令安装conda命令安装

这两种安装方法适用于Windows, Linux,以及Mac系统。

(1)pip命令:pip install numpy




当终端显示成功安装或者曾经安装阐明numpy曾经安装终了。

(2)conda命令: conda install numpy

conda命令是经过Anaconda软件来安装NumPy。安装好Anaconda软件后,打开Anaconda Prompt后在外面输入conda install numpy命令即可。





安装完成后,为了检验NumPy能否可以运用,我们用一个简单的例子做个实验:

代码:
importnumpyasnpprint(np.eye(4))
讲解:

为了方便,大家普通采用import numpy as np这种调用方法,将numpy缩写成np来运用。我们运用NumPy中的eye()函数来检查NumPy能否曾经安装完成,eye(N)是一个产生N*N的单位矩阵

运转结果:

[[1. 0. 0. 0.]

[0. 1. 0. 0.]

[0. 0. 1. 0.]

[0. 0. 0. 1.]]

假如大家的屏幕外面也出现了这个结果,那么恭喜你NumPy库曾经成功安装,可以末尾正式学习了。

NumPy和列表

我们首先要搞清楚的是,NumPy处理的对象是什么。理想上,我们把NumPy处理的对象叫ndarray,这是一个缩写,翻译过来叫做多维数组。ndarray类型的数据和我们之前学过的列表颇有渊源:

代码:
import numpy as nplist=[1,2,3]arr=np.array(list)print(type(list))print(type(arr))
讲解:

我们首先建立一个列表,然后经过np.array函数将这个列表转换成一个NumPy数组,经过打印这两个变量的type信息,我们可以发现二者的区别和联络。

运转结果:





没错,arr变量的数据类型是ndarray。当然,我们并不是总是经过转换列表变成ndarray。我们想强调的是,虽然NumPy数组虽然和列表很相似,但是二者却是完全不同的数据类型,因此二者运用方法也有很大不同。

Numpy比Python列表更具优势,其中一个优势便是速度。在对大型数组执行操作时,Numpy的速度比Python列表的速度快了好几百。由于Numpy数组本身能节省内存,并且Numpy在执行算术、统计和线性代数运算时采用了优化算法

常见数组

我们最后给大家引见常见的几种ndarray数组:

代码:
a=np.array([1,2,3])b=np.array([[1,2],[3,4]])c=np.array([1,2,3],dtype=complex)print(a)print(b)print(c)
讲解:

a是一个一维数组;b是一个二维数组;c是复数变量的一维数组。这些都是常见的ndarray,当前我们将会用NumPy提供的函数对这些常见的数组停止处理,来完成我们想要的目的。

运转结果:

[1 2 3]

[[1 2]

[3 4]]

[1.+0.j 2.+0.j 3.+0.j]



第二节.NumPy数组属性

我们将几种常见数组属性分成以下几种:
    数据类型 dtype元素个数 size维度 ndim外形 shape实部和虚部 real image

NumPy支持很多不同的数据类型,从整数型(int)到浮点型(float),再到复数型,应有尽有。如何判别数组的数据类型是一件比较重要的事情,NumPy给我们提供了dtype命令来查看数据类型:

代码:
importnumpyasnpa=np.array([1,2,3])b=np.array([[1.1,2],[3.1,4.2]])c=np.array([1,2,3],dtype=complex)print(a.dtype,b.dtype,c.dtype)
讲解:

我们分别建立了三个NumPy数组,a是整数型;b是浮点型;c是复数型。dtype既可以在创建数组的时分声明变量类型,也可以经过打印告诉我们数组的数据类型。

运转结果:

int32 float64 complex128

在我们知道了NumPy数据类型后,我们还需求知道它的更多属性来片面了解这个数组。

代码:
b=np.array([[1.1,2],[3.1,4.2]])c=np.array([1,2,3],dtype=complex)print(b.ndim,b.shape,b.size)print(c.real,c.imag)
讲解:

我们分别查看了b数组的维度,外形,以及元素个数。我们知道b是一个2*2的浮点型数组,由于它的维度是2,外形就是行数乘以列数(2,2);元素个数是4。对于c这个复数数组,我们调用了实部(real)和虚部(imag)这个两个属性。

运转结果:

2 (2, 2) 4

[1. 2. 3.] [0. 0. 0.]



第三节.创建数组

对于NumPy数组,普通而言我们有三种创建方法:
    用np.array直接填入已知数据,比如我们在第一大节引见常见数组的时分用的方法。用特殊函数创建符合一定规律的数组。比如numpy.zeros:创建元素全是0的数组。用asarray将其他类型数据转换成NumPy数组。

我们先引见第二种方法中常见的几种函数:
    numpy.zeros 创建元素全是0的数组numpy.ones 创建元素全是1的数组numpy.arrange 创建数值范围numpy.linspace 创建数值范围

np.zeros() & np.ones()

代码:
e=np.array([1,2,3],dtype=float)f=np.zeros((3,2),dtype=int)g=np.ones((1,3))print(e)print(f)print(g)
讲解:

我们用第一种方法,创建了数据类型为浮点型(float)的数组e;然后经过第二种方法,分别创建了元素都是0和1的两个数组。留意到我们可以经过dtype,以及shape等来控制数组属性。在下面的例子中f和g,我们把shape省略了,只用(3,2)这种方式。

运转结果:

[1. 2. 3.]

[[0 0]

[0 0]

[0 0]]

[[1. 1. 1.]]




np.arrange()

很多状况下我们非常想要得到从一个整数到另一个整数的一个数组,比如周一到周日,一天中从1点到24点等,还有从-10度到40度的温度范围。这时分用NumPy中的arange函数就可以协助你达成这个目的。

arange函数有四个输入参数来调整:
    start 起始值stop 终止值step 步长(默许是1)dtype 数据类型。

值得留意的是,这里的终止值是取不到的,所以真正意义上而言终止值是stop-1。

代码:
importnumpyasnpa=np.arange(5)b=np.arange(1,5)c=np.arange(1,10,2)d=np.arange(2,6,dtype=float)print(a,b,c,d)
讲解:

我们一共建立了四个数组,第一个我们只要一个参数,是终止值参数,这时分其他参数都是默许的。第二个数组,我们给定了起始值和终止值。第三个数组我们添加了步长。第四个数组,我们隐藏的其实是步长,也就是取默许值1。大家在看答案之前可以猜一下a,b,c,d分别是多少。

运转结果:

[0 1 2 3 4] [1 2 3 4] [1 3 5 7 9] [2. 3. 4. 5.]




np.linspace()

linspace是linear space的缩写,线性空间。和arange稍有不同的是,linspace没有步长,相反它有个叫做num的参数来控制生成数列的总数目。也就是说,在给定起始值和终止值的时分,步长被总数目决议了。

代码:
a=np.linspace(1,10,10)b=np.linspace(10,20,5,endpoint=False)c=np.linspace(10,20,5,endpoint=False,retstep=True)print(a)print(b)print(c)
讲解:

我们分别应用linspace建立了三个数组,第一个endpoint不赋值,默许是True,默许终止值是包含在内的;第二个我们不把终止值包括在内;最后我们用retstep=True显示数列的间距。

运转结果:

[ 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.]

[10. 12. 14. 16. 18.]

(array([10., 12., 14., 16., 18.]), 2.0)




第三种创建方法:asarray() & array()

asarray函数可以将其他数据类型转换成Numpy数组。

代码:
a=[1,2,3]b=(1,2,3)a_1=np.array(a)a_2=np.asarray(a)b_1=np.array(b)b_2=np.asarray(b)print(a_1,a_2,type(a_1))print(b_1,b_2)
讲解:

我们建立了一个列表a和一个元组b,分别用np.array和np.asarray来转换。其真实将列表和元组转换成numpy数组的时分效果是一样的。也就是说不论是从列表a出发得到的a_1和a_2还是从元组b出发得到的b_1和b_2都是numpy数组[1,2,3]。

但是,他们二者还是有区别的,当数据源是ndarray,即numpy数组的时分,array会复制出一个副本,占用新的内存,但是asarray并不会。从这里看来,对普通的程序义务,我们并不太需求区分array和asarray,除非做大型数据的时分

运转结果:

[1 2 3] [1 2 3]

[1 2 3] [1 2 3]



总结回顾

    两种方法安装NumPy,NumPy和列表的区别和联络。NumPy数组的几种属性,包括数据类型,维度,大小等。三种创建数组的方法,直接创建,特殊函数,数组转换。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

大神点评3

典狱长icon 2020-2-22 20:31:04 显示全部楼层
前排支持下
回复

使用道具 举报

纳兰契 2020-2-24 07:03:13 显示全部楼层
鄙视楼下的顶帖没我快,哈哈
回复

使用道具 举报

左岸永年 2020-2-24 17:43:52 来自手机 显示全部楼层
众里寻他千百度,蓦然回首在这里!
回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies