Python进阶之NumPy快速入门(一)(numpy进阶educoder)
ztj100 2024-11-10 13:14 13 浏览 0 评论
前言
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是否可以使用,我们用一个简单的例子做个实验:
代码:
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数组,一般而言我们有三种创建方法:
- 用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。
代码:
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]
总结回顾
- 两种方法安装NumPy,NumPy和列表的区别和联系。
- NumPy数组的几种属性,包括数据类型,维度,大小等。
- 三种创建数组的方法,直接创建,特殊函数,数组转换。
相关推荐
- Vue 技术栈(全家桶)(vue technology)
-
Vue技术栈(全家桶)尚硅谷前端研究院第1章:Vue核心Vue简介官网英文官网:https://vuejs.org/中文官网:https://cn.vuejs.org/...
- vue 基础- nextTick 的使用场景(vue的nexttick这个方法有什么用)
-
前言《vue基础》系列是再次回炉vue记的笔记,除了官网那部分知识点外,还会加入自己的一些理解。(里面会有部分和官网相同的文案,有经验的同学择感兴趣的阅读)在开发时,是不是遇到过这样的场景,响应...
- vue3 组件初始化流程(vue组件初始化顺序)
-
学习完成响应式系统后,咋们来看看vue3组件的初始化流程既然是看vue组件的初始化流程,咋们先来创建基本的代码,跑跑流程(在app.vue中写入以下内容,来跑流程)...
- vue3优雅的设置element-plus的table自动滚动到底部
-
场景我是需要在table最后添加一行数据,然后把滚动条滚动到最后。查网上的解决方案都是读取html结构,暴力的去获取,虽能解决问题,但是不喜欢这种打补丁的解决方案,我想着官方应该有相关的定义,于是就去...
- Vue3为什么推荐使用ref而不是reactive
-
为什么推荐使用ref而不是reactivereactive本身具有很大局限性导致使用过程需要额外注意,如果忽视这些问题将对开发造成不小的麻烦;ref更像是vue2时代optionapi的data的替...
- 9、echarts 在 vue 中怎么引用?(必会)
-
首先我们初始化一个vue项目,执行vueinitwebpackechart,接着我们进入初始化的项目下。安装echarts,npminstallecharts-S//或...
- 无所不能,将 Vue 渲染到嵌入式液晶屏
-
该文章转载自公众号@前端时刻,https://mp.weixin.qq.com/s/WDHW36zhfNFVFVv4jO2vrA前言...
- vue-element-admin 增删改查(五)(vue-element-admin怎么用)
-
此篇幅比较长,涉及到的小知识点也比较多,一定要耐心看完,记住学东西没有耐心可不行!!!一、添加和修改注:添加和编辑用到了同一个组件,也就是此篇文章你能学会如何封装组件及引用组件;第二能学会async和...
- 最全的 Vue 面试题+详解答案(vue面试题知识点大全)
-
前言本文整理了...
- 基于 vue3.0 桌面端朋友圈/登录验证+60s倒计时
-
今天给大家分享的是Vue3聊天实例中的朋友圈的实现及登录验证和倒计时操作。先上效果图这个是最新开发的vue3.x网页端聊天项目中的朋友圈模块。用到了ElementPlus...
- 不来看看这些 VUE 的生命周期钩子函数?| 原力计划
-
作者|huangfuyk责编|王晓曼出品|CSDN博客VUE的生命周期钩子函数:就是指在一个组件从创建到销毁的过程自动执行的函数,包含组件的变化。可以分为:创建、挂载、更新、销毁四个模块...
- Vue3.5正式上线,父传子props用法更丝滑简洁
-
前言Vue3.5在2024-09-03正式上线,目前在Vue官网显最新版本已经是Vue3.5,其中主要包含了几个小改动,我留意到日常最常用的改动就是props了,肯定是用Vue3的人必用的,所以针对性...
- Vue 3 生命周期完整指南(vue生命周期及使用)
-
Vue2和Vue3中的生命周期钩子的工作方式非常相似,我们仍然可以访问相同的钩子,也希望将它们能用于相同的场景。...
- 救命!这 10 个 Vue3 技巧藏太深了!性能翻倍 + 摸鱼神器全揭秘
-
前端打工人集合!是不是经常遇到这些崩溃瞬间:Vue3项目越写越卡,组件通信像走迷宫,复杂逻辑写得脑壳疼?别慌!作为在一线摸爬滚打多年的老前端,今天直接甩出10个超实用的Vue3实战技巧,手把...
- 怎么在 vue 中使用 form 清除校验状态?
-
在Vue中使用表单验证时,经常需要清除表单的校验状态。下面我将介绍一些方法来清除表单的校验状态。1.使用this.$refs...
你 发表评论:
欢迎- 一周热门
- 最近发表
-
- Vue 技术栈(全家桶)(vue technology)
- vue 基础- nextTick 的使用场景(vue的nexttick这个方法有什么用)
- vue3 组件初始化流程(vue组件初始化顺序)
- vue3优雅的设置element-plus的table自动滚动到底部
- Vue3为什么推荐使用ref而不是reactive
- 9、echarts 在 vue 中怎么引用?(必会)
- 无所不能,将 Vue 渲染到嵌入式液晶屏
- vue-element-admin 增删改查(五)(vue-element-admin怎么用)
- 最全的 Vue 面试题+详解答案(vue面试题知识点大全)
- 基于 vue3.0 桌面端朋友圈/登录验证+60s倒计时
- 标签列表
-
- idea eval reset (50)
- vue dispatch (70)
- update canceled (42)
- order by asc (53)
- spring gateway (67)
- 简单代码编程 贪吃蛇 (40)
- transforms.resize (33)
- redisson trylock (35)
- 卸载node (35)
- np.reshape (33)
- torch.arange (34)
- node卸载 (33)
- npm 源 (35)
- vue3 deep (35)
- win10 ssh (35)
- exceptionininitializererror (33)
- vue foreach (34)
- idea设置编码为utf8 (35)
- vue 数组添加元素 (34)
- std find (34)
- tablefield注解用途 (35)
- python str转json (34)
- java websocket客户端 (34)
- tensor.view (34)
- java jackson (34)