numpy安装_Python进阶之NumPy快速入门(一)

前言

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

03a251f18650cc336cad15a0f5c893a4.png

当终端显示成功安装或者已经安装说明numpy已经安装完毕。

(2)conda命令: conda install numpy

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

b559a4095bce429c0274e74ed2478d43.png
5fd40103f279b939c315697e6261b631.png

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

代码:

import numpy as npprint (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命令来查看数据类型:

代码:

import numpy as npa = 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 npa = 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. 三种创建数组的方法,直接创建,特殊函数,数组转换。

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

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

相关文章

gc java root_聊聊Java的GC机制

原标题:聊聊Java的GC机制近日,MIUI在小米全球社区发布公告,表示MIUI将在全球市场销售的手机中预装谷歌拨号及谷歌消息应用程序(中国、印度、印度尼西亚等市场除外)。小米表示,小米9T Pro之后的设备在全球范围内都将会预装上述两款…

c语言课程设计 第2版,c语言课程设计报告模版(电子版)2.pdf

c语言课程设计报告模版(电子版)2大连交通大学 软件学院 C语言课程设计报告SOFTWARE INSTITUTEOF DALIAN JIAOTONG UNIVERSITY EXPERIMENT DESIGNINGC语言课程设计报告Course Design reporter课程名称 : C语言课程设计英文名称 : Course Design of C Programming专 业…

jmeter跨线程组传多个值_Jmeter 跨线程组传递参数 之两种方法(转)

终于搞定了Jmeter跨线程组之间传递参数,这样就不用每次发送请求B之前,都需要同时发送一下登录接口(因为同一个线程组下的请求是同时发送的),只需要发送一次登录请求,请求B直接用登录请求的参数即可,直到登录接口的参数…

wallpaper代码_70 行 python 代码实现壁纸批量下载!

好久没有写文章了,因为最近都在适应新的岗位,以及利用闲暇时间学习python。这篇文章是最近的一个python学习阶段性总结,开发了一个爬虫批量下载某壁纸网站的高清壁纸。注意:本文所属项目仅用于python学习,严禁作为其他…

c语言调用go函数,C中调用go中的回调函数

在用go包装某些c库时(如glut),需要将go函数当作回调函数传递给c库(如glutDisplayFunc(&draw)中的draw函数,我想将go写的函数传过去),应该怎么做?我写了一个示例,但一直不成功,不知道为什么?…

100g流量在电脑上可以用多久_三大运营商5G体验方案出炉!100G一个月够不够?...

前段时间,工信部向中国移动、中国联通、中国电信、中国广电发放5G商用牌照,这也意味着,我国5G网络正式开始被商用。并且目前三大运营商都已完成了5G网络下的终端组网测试,计划于今年第三季度开始进行试商用。而就在近期&#xff0…

easyui一行显示多行_easyui datagrid以及oracle中的多行合并一行

页面显示:前端代码:toolbar"#toolbar" rownumbers"true" singleSelect"true" fitColumns"true">大箱码关联的箱码(不同箱码用分号分开,相同箱码用逗号分开)关联数量data-options"total: 0,pageSize:15,pageList: […

leetcode跳跃游戏C语言,LeetCode:跳跃游戏

给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个位置。示例 1:输入: [2,3,1,1,4]输出: true解释: 我们可以先跳 1 步,从位置 0 到达 位置 1, 然后再从位置 1 跳 3 步到…

java 获取注释_Java面试题Java语言有哪些注释的方式?

点击上方“千锋Java学院”,选择“置顶公众号”每天一道面试模拟真题及解析课前导读●回复"每日一练"获取以前的题目,持续更新!●我希望大家积极参与!有什么不懂可以加小千微信进行讨论★把面试准备工作,拆分…

度秘语音引擎app_语音机器人哪家强 度秘/小冰/Siri/小娜横向评测

关于智能语音机器人,想必大家都不陌生,它们在某种程度上给我们带来了极大的便利。近日,百度推出了基于百度人工智能的手机助理产品——度秘。笔者也进行了体验,感觉不错,就顺带连着微软小冰、小娜和苹果Siri一起来个横…

c语言数字储存于变量,用C语言写中文数字字符串转数值变量

用C语言写中文数字字符串转数值变量C语言写中文数字字符转数值变量最近突发奇想:程序中要是输入一串中文数字,如“十万”就能自动识别转换成数值100000储存到变量里该多好。也许你会说,那很简单啊,先将中文字符分开,再…

微服务微应用的安全测试_提高微服务安全性的11个方法

1.通过设计确保安全设计安全,意味着从一开始就应该将安全性纳入软件设计中。关于安全,其中最常见的一个威胁就是恶意字符。我问我的朋友罗伯温奇(Rob Winch)他对删除恶意字符的想法。Rob是Spring Security项目的负责人,被广泛认为是安全专家。…

密度图的密度估计_箱形图、小提琴图、直方图……统统可以卡通化!

全文共11345字,预计学习时长23分钟或更长对于数据科学家来说,可视化工具比比皆是,因此,退一步去钻研每种可视化的类型及其适用的最佳案例就变得十分重要。为了发挥工具的最佳效用,有时可以考虑将其拟人化,甚…

android 屏幕分辨率 屏幕密度,Android屏幕适配——多分辨率多屏幕密度

为什么要适配,适配的好处等等这里就不说了,直接说我们要怎么适配,请看下面的内容。1.重要概念px:pixel,像素Android原生API,UI设计计量单位,如获取屏幕宽高。屏幕分辨率:指在纵向和横…

操作系统锁的实现方法有哪几种_「从入门到放弃-Java」并发编程-锁-synchronized...

简介上篇【从入门到放弃-Java】并发编程-线程安全中,我们了解到,可以通过加锁机制来保护共享对象,来实现线程安全。synchronized是java提供的一种内置的锁机制。通过synchronized关键字同步代码块。线程在进入同步代码块之前会自动获得锁&…

cocos2dx标准容器_cocos2dx[3.2](24)——内存管理机制

【唠叨】整合参考文档。【参考】【内存管理机制】在3.x版本,Cocos2d-x采用全新的根类 Ref,实现Cocos2d-x 类对象的引用计数记录。引擎中的所有类都派生自Ref。1、引用计数Cocos2d-x 提供引用计数管理内存。> 调用 retain() 方法 &#xf…

android长按加入购物车,《Android APP可能有的东西》之UI篇:加入购物车动画

很多电商app的加入购物车的动作会要求加上动画效果:飞进购物车,想来也合理,在listview界面时商品快速加入购物车,一直toast用户加入成功好像不太正常,所以添加一个动画,用户自然就懂了,而且也挺…

python里的shell是什么_python中的shell操作

http://blog.csdn.net/meng_tianshi/article/details/6682317 首先介绍一个函数: os.system(command) 这个函数可以调用shell运行命令行command并且返回它的返回值。试一下在python的解释器里输入os.system(”ls-l”),就可以看到”ls”列出了当前目录下的…

基于android 定位系统,基于Android平台定位系统设计和实现

2 0 1 3牟第 1 2期文章编号: 1 0 0 9— 2 5 5 2 ( 2 0 1 3 ) 1 2— 0 1 8 7— 0 4 中图分类号: T P 3 1 6 . 8 9 文献标识码: A基于 A n d r o i d平台定位系统设计和实现李瑞宣,王山东,徐志远,王伶俐(河海…

集合竞价如何买入_集合竞价买入法 如何在集合竞价中买入股票?

集合竞价买入法、 如何在集合竞价中买入股票?要想集合竞价买入涨停板,要做到如下3点:快、准、狠!文章将为你盘点这几个方法的具体做法,希望对股民有所帮助。快:就是利用9:15-9:25这1…