百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分类 > 正文

Python进阶之NumPy快速入门(一)(numpy进阶educoder)

ztj100 2024-11-10 13:14 21 浏览 0 评论

前言

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

这个NumPy快速入门系列分为四篇,包含了NumPy大部分基础知识,每篇阅读时间不长,但内容含量高。大家最好亲自码一遍代码,这样可以更有收获。


概要

  1. 轻松认识和安装NumPy,对NumPy建立一个良好印象。
  2. 掌握NumPy的各种属性,让使用数组变得得心应手。
  3. 学会三种创建数组方法,让创建数组变得轻而易举。

第一节.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是否可以使用,我们用一个简单的例子做个实验:

代码:

import?numpy?as?np
print?(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 np
list?=?[1,?2,?3]
arr?=?np.array(list)
print?(type(list))
print?(type(arr))

讲解:

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

运行结果:

<class 'list'>

<class 'numpy.ndarray'>

没错,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命令来查看数据类型:

代码:

import?numpy?as?np
a?=?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数组,一般而言我们有三种创建方法:

  1. 用np.array直接填入已知数据,比如我们在第一小节介绍常见数组的时候用的方法。
  2. 用特殊函数创建符合一定规律的数组。比如numpy.zeros:创建元素全是0的数组。
  3. 用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。

代码:

import?numpy?as?np
a?=?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]


总结回顾

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

相关推荐

这个 JavaScript Api 已被废弃!请慎用!

在开发过程中,我们可能会不自觉地使用一些已经被标记为废弃的JavaScriptAPI。这些...

JavaScript中10个“过时”的API,你的代码里还在用吗?

JavaScript作为一门不断发展的语言,其API也在持续进化。新的、更安全、更高效的API不断涌现,而一些旧的API则因为各种原因(如安全问题、性能瓶颈、设计缺陷或有了更好的替代品)被标记为“废...

几大开源免费的 JavaScript 富文本编辑器测评

MarkDown编辑器用的时间长了,发现发现富文本编辑器用起来是真的舒服。...

比较好的网页里面的 html 编辑器 推荐

如果您正在寻找嵌入到网页中的HTML编辑器,以便用户可以直接在网页上编辑HTML内容,以下是几个备受推荐的:CKEditor:CKEditor是一个功能强大的、开源的富文本编辑器,可以嵌入到...

Luckysheet 实现excel多人在线协同编辑

前言前些天看到Luckysheet支持协同编辑Excel,正符合我们协同项目的一部分,故而想进一步完善协同文章,但是遇到了一下困难,特此做声明哈,若侵权,请联系我删除文章!若侵犯版权、个人隐私,请联系...

从 Element UI 源码的构建流程来看前端 UI 库设计

作者:前端森林转发链接:https://mp.weixin.qq.com/s/ziDMLDJcvx07aM6xoEyWHQ引言...

手把手教你如何用 Decorator 装饰你的 Typescript?「实践」

作者:Nealyang转发连接:https://mp.weixin.qq.com/s/PFgc8xD7gT40-9qXNTpk7A...

推荐五个优秀的富文本编辑器

富文本编辑器是一种可嵌入浏览器网页中,所见即所得的文本编辑器。对于许多从事前端开发的小伙伴来说并不算陌生,它的应用场景非常广泛,平时发个评论、写篇博客文章等都能见到它的身影。...

基于vue + element的后台管理系统解决方案

作者:林鑫转发链接:https://github.com/lin-xin前言该方案作为一套多功能的后台框架模板,适用于绝大部分的后台管理系统(WebManagementSystem)开发。基于v...

开源富文本编辑器Quill 2.0重磅发布

开源富文本编辑器Quill正式发布2.0版本。官方TypeScript声明...

Python之Web开发框架学习 Django-表单处理

在Django中创建表单实际上类似于创建模型。同样,我们只需要从Django类继承,则类属性将是表单字段。让我们在myapp文件夹中添加一个forms.py文件以包含我们的应用程序表单。我们将创建一个...

Django测试入门:打造坚实代码基础的钥匙

这一篇说一下django框架的自动化测试,...

Django ORM vs SQLAlchemy:到底谁更香?从入门到上头的选择指南

阅读文章前辛苦您点下“关注”,方便讨论和分享,为了回馈您的支持,我将每日更新优质内容。...

超详细的Django 框架介绍,它来了!

时光荏苒,一晃小编的Tornado框架系列也结束了。这个框架虽然没有之前的FastAPI高流量,但是,它也是小编的心血呀。总共16篇博文,从入门到进阶,包含了框架的方方面面。虽然小编有些方面介绍得不是...

20《Nginx 入门教程》使用 Nginx 部署 Python 项目

今天的目标是完成一个PythonWeb项目的线上部署,我们使用最新的Django项目搭建一个简易的Web工程,然后基于Nginx服务部署该PythonWeb项目。1.前期准备...

取消回复欢迎 发表评论: