numpy

本套教程是基于莫烦python的教学视频记录的学习笔记,每一部分都是一个可运行的python代码块,可以直接拷贝运行,并且知识点都有清晰地注释

0、作用

使用numpy&pandas使得数据分析中计算非常快,比python自带的字典和列表快很多,因为这俩模块使用C语言编写的。应用到了矩阵的运算,使用C语言实现,更快。

1、安装

直接在终端使用命令

pip install numpy

安装完成即可

2、numpy基本属性

基本属性包括:将列表转换为numpy的array,查看array的维度、形状、总元素个数

import numpy as np #一般习惯重命名为np
# 将列表转换为numpy的矩阵
array = np.array([[1,2,3],[2,3,4]])
print(array)
# 维度
print('number of dimation: ',array.ndim)
# 形状
print('shape:',array.shape)
# 总共多少个元素在矩阵中
print('size:',array.size)

3、创建

创建的方法有:

  1. 直接传入列表
  2. 通过zeros()方法生成全为0的矩阵
  3. 通过ones()方法生成全为1的矩阵
  4. 通过empty()方法生成全为0的矩阵
  5. 通过arange()方法生成有序array
  6. 使用reshape指定形状,注意,元素个数可以变成指定的形状否则报错
  7. linspace分段
  8. 使用random模块,生成随机的。随机数位于0到1之间
import numpy as np
# 1,直接传入列表,使用的type指定数据类型,比如float32,几位数字需要根据精度需求来确定
# 位数越大,精度越高但同时占用空间越大
a = np.array([[2,3,4],[3,4,5]],dtype=np.float32)
# 打印出来,和列表的差别就是,没有逗号
print(a)
print(a.dtype)# 2,直接生成全部为0的矩阵,需要在参数中传入形状(用一个括号包着)
# 如果不指定数据类型,zeros默认为float64
b = np.zeros((3,4))
print(b)
# 同理,生成全为1的,使用ones方法即可
b = np.ones((4,5),dtype=np.int16)
print(b)# 3,empty,相当于生成全为0的
c = np.empty((3,4))
print(c)# 4,生成有序,和python中的arange相同,指定区间(左闭右开),指定步长
# 步长为2,10到20之间
c = np.arange(10,21,2)
print(c)# 5,使用reshape指定形状,注意,元素个数可以变成指定的形状否则报错
c = np.arange(12).reshape((3,4))
print(c)# 6,linspace分段,在闭区间1到10中生成5个点,平均分成4段
a = np.linspace(0,10,5)
print(a)# 7、使用random模块,生成随机的。随机数位于0到1之间
a = np.random.random((2,4))
print(a)

4、运算

  1. 加法、减法、指数运算、三角函数运算、布尔值运算。都是对每个元素都进行运算
  2. 矩阵乘法
    • 逐个元素相乘
    • 使用dot方法矩阵相乘(线性代数的知识)
  3. 求和,求最大值最小值,都是返回一个指定的元素
  4. 求指定维度的和、最大最小值,需要根据axis指定维度
import numpy as np
a = np.array([10,20,30,40])
b = np.arange(4)
print(a,b)
# 1、减法
print(a-b)
# 2、加法
print(a+b)
# 3、指数
print(a**2)
# 4、三角函数运算
# print(np.sin(a),np.cos(a),np.tan(a))
# 5、布尔值
print(b)
print(b<3)
print(b==3)############矩阵###########
a = np.array([[10,20],[30,45]])
b = np.arange(4).reshape((2,2))
print(a)
print(b)
# 乘法,逐个相乘
print(a*b)
# 乘法,矩阵相乘,使用np.dot或者a.dot(b)
print(np.dot(a,b))
print(a.dot(b))# 随机生成一个矩阵
a = np.random.random((2,4))
print(a)
# 求和,或者写成a.sum()
print(np.sum(a))
# 最大值
print(np.max(a))
# 最小值
print(np.min(a))
# 求指定维度的和,最大最小值
# axis为1,就是将维度为1的元素累加,该维度消失,只剩下维度为0的行
print(np.sum(a,axis=1))
print(np.max(a,axis=1))
print(np.min(a,axis=0))
# 另一种写法
print(a.min(axis=0))
# 总结,axis的值为求和的维度,运算之后该维度消失

5、运算2

  1. 求最小最大值索引
  2. 求平均值,指定维度求平均值
  3. 求中位数
  4. 累加,第n个元素为原矩阵前n个元素的和
  5. 累差,原矩阵相邻元素之间的差值,列数减一
  6. 找出非0的元素,返回的值是多个表示非零元素的维度数组,数组拼接即可得到非零元素的索引值
  7. 排序,按照最小的维度排序,对于矩阵就是对行内的列元素排序
  8. 转置矩阵
import numpy as np
A = np.arange(2,14).reshape((3,4))
print(A)
# 最小值索引,两种写法都可
print(np.argmin(A))
print(A.argmin())
# 最大值索引
print(A.argmax())
# 求平均值
print(A.mean())
# 也可以指定维度
print(np.mean(A,axis=0))
print(np.average(A))
# 不能这样使用average
# print(A.average())# 求中位数,也是只能np.median
print(np.median(A))
# 累加,第n个元素为原矩阵前n个元素的和
print(np.cumsum(A))
# 累差,原矩阵相邻元素之间的差值,列数减一了,因为n个元素有n-1个差值
print(np.diff(A))
# 找出非零元素,返回维度的数组
print(np.nonzero(A))# 排序,最小的那个维度的数进行排序。如果是矩阵,就是行内的每列元素进行排序
B = np.arange(14,2,-1).reshape((3,4))
print(B)
# 不会改变原矩阵的值
print(np.sort(B))# 矩阵的转置,行变成列,列变成行
print(np.transpose(B))
print(B.T)
print((B.T).dot(B))# clip,所有大于9的数都变成9,小于5的数都变成5,5到9之间的数不变
print(B)
print(np.clip(B,5,9))

6、索引

  1. 对于多维的索引,索引号都放在一个中括号中,用逗号分割开
  2. 切片
  3. for迭代,默认迭代矩阵的行
import numpy as npA = np.arange(3,15).reshape((3,4))
print(A)
print(A[2])
print(A[2][1])
# 多维索引都放在一个中括号中,用逗号分割
print(A[2,1])# 切片
# 第一维度所有元素,就是原矩阵
print(A[:])
# 第一维度不限定,第二维度索引为1
print(A[:,1])
# 切片限定第二维度(列)
print(A[1,1:3])
print("********************")# for迭代,默认迭代矩阵的行。就是第一维度
for row in A:print(row)
# 迭代矩阵的列,可以通过迭代转置矩阵的列
for col in A.T:print(col)
# 迭代每一个元素,flat之后是一个一维的列表
for item in A.flat:print(item,end=',')

7、array合并

  1. 使用vstack实现多个array上下合并
  2. 使用hstack实现多个array水平合并
  3. 把一个横向的数列变成纵向的数列
  4. 使用concatenate多个array的合并指定合并的维度
import numpy as np
A = np.array([1,1,1])
B = np.array([2,2,2])# 上下合并
C = np.vstack((A,B))
print(C)
print(A.shape,C.shape)# 左右合并(水平合并) horizontal stack
D = np.hstack((A,B))
print(D)
print(A.shape,D.shape)print("*********************")
# 如何把一个横向的数列变成纵向的数列
A = A[:,np.newaxis]
B = B[:,np.newaxis]
print(A.shape,B.shape)
# 左右合并,hstack和vstack都可以进行多个array的合并
D = np.hstack((A,B,B))
print(D)# 多个array的合并指定合并的维度,和上面两个不同的就是可以指定合并的维度
# 比如,在第一维度合并,即合并行
C = np.concatenate((A,B,B,A),axis=0)
print(C)
# 合并列
print(np.concatenate((A,B,B,A),axis=1))

8、分割

  1. 使用split均等分割
  2. 使用array_split不均等分割
  3. 使用vsplit和hsplit进行均等分割
import numpy as npA = np.arange(12).reshape((3,4))
print(A)
# 均等分割,使用split均等分割
print(np.split(A,2,axis=1))
print(np.split(A,3,axis=0))# 不均等分割,使用array_split
# 这里将四列分为三部分,第一部分为2列,2,3部分为1列
print(np.array_split(A,3,axis=1))
# 使用vsplit和hsplit进行分割
print(np.vsplit(A,3))
print(np.hsplit(A,2))

9、copy和deep copy

  1. 通过 = 赋值的变量都指向同一个数据
  2. 使用copy方法使复制后两个变量不相关联
import numpy as np
a = np.arange(4)
print(a)
b = a
c = a
d = b
# 目前为止,abcd都是一样
# 这里更改a的值,观察其他变量的改变
a[0]=11
print(a,b,c,d)
print(b is a,c is a,d is a)
# 可以看到,改变了a,bcd都会改变,哪怕是通过b赋值的d
# 同理,改变了bcd任何一个元素,a的值也会改变
# 所以,通过=赋值的变量都是指向同一个数据,是浅拷贝# 如果想让赋值后的两个变量不相关联,使用copy()方法
e = a.copy()
print(e is a)
a[1]=22
print(a,e)

【numpy学习】numpy教程--基于莫烦python的教程相关推荐

  1. 莫烦Python[基础教程]

    python基础教程一 安装 定义功能 函数参数 函数默认参数 可变参数 关键字参数 变量形式 模块安装 文件读取 文件读取1 文件读取2 文件读取3 Class类 input输入 元组.列表.字典 ...

  2. 莫烦python系列教程_莫烦python教程学习笔记——总结篇

    一.机器学习算法分类: 监督学习:提供数据和数据分类标签.--分类.回归 非监督学习:只提供数据,不提供标签. 半监督学习 强化学习:尝试各种手段,自己去适应环境和规则.总结经验利用反馈,不断提高算法 ...

  3. CNN识别手写数字-莫烦python

    搭建一个 CNN识别手写数字 前面跟着莫烦python/tensorflow教程完成了神经网络识别手写数字的代码,这一part是cnn识别手写数字的 import tensorflow as tf f ...

  4. 【莫烦Python】Numpy教程

    目录 前言 1.numpy属性 2.numpy的array创建 3.numpy的基础运算 4.numpy的基础运算2 5.numpy的索引 6.numpy的array合并 7.numpy的array分 ...

  5. 莫烦python教程下载_Python 有哪些好的学习资料或者博客?

    Python是一门语法非常简单的语言,学习Python不需要花大量时间去学习它的语法,过一遍就行,主要靠实践.先给大家分享一个免费的Python的编程课,有Python的视频课程+代码实践课+辅导答疑 ...

  6. 【莫烦Python】Python 基础教程——学习笔记

    文章目录 本笔记基于p1-p29[莫烦Python]Python 基础教程 大家可以根据代码内容和注释进行学习. 安装 我的:python3.8+anaconda+VS code print() pr ...

  7. 【莫烦Python】Pandas教程

    目录 前言 1.Pandas vs Numpy 2.基本介绍 3.选择数据 4.设置值 5.处理丢失的数据 6.pandas导入导出 7.pandas合并concat 8.pandas合并merge ...

  8. 【莫烦Python】Matplotlib Python画图教程

    目录 前言 1.基本使用 1.1 基本用法 1.2 figure图像 1.3 设置坐标轴1 1.4 设置坐标轴2 1.5 Legend图例 1.6 Annotation标注 1.7 tick能见度 2 ...

  9. 莫烦Python NumpyPandas 学习笔记

    莫烦Python Numpy&Pandas 学习笔记 原文(视频)地址:https://www.bilibili.com/video/BV1Ex411L7oT 1. 安装 numpy官方网站: ...

  10. 【莫烦Python】机器要说话 NLP 自然语言处理教程 W2V Transformer BERT Seq2Seq GPT 笔记

    [莫烦Python]机器要说话 NLP 自然语言处理教程 W2V Transformer BERT Seq2Seq GPT 笔记 教程与代码地址 P1 NLP行业大佬采访 P2 NLP简介 P3 1. ...

最新文章

  1. 安装zookeeper集群
  2. Python 使用穷举法求两个数的最大公约数。
  3. 锋利的jQuery第2版学习笔记8~11章
  4. 如何在command中使用log
  5. java基础方法笔记
  6. 锐捷服务器有什么型号,锐捷管理服务器RG-RCMS-16
  7. Winform开发技术详解 - 应用环境 相关技术介绍
  8. jquery实现上下左右键盘监听_初识 jquery.simulate.js 模拟键盘事件
  9. 三维扫描仪[10]——如何设计一台云台式扫描仪(代码详解)
  10. 八卦在计算机应用,计算机编程在八卦图研究中的应用.doc
  11. OS monitor 项目
  12. php sendmail 抄送,Python发送邮件各种姿势
  13. 9张图揭秘:优秀的数据分析项目,这样做!
  14. 宝塔用ip+端口访问服务器时出现无法访问此网站
  15. order by语句使用
  16. 是寒冬还是风口?2015年HTML5游戏完整产业链报告
  17. 红队渗透测试技术:如何通过鱼叉式网络钓鱼获得攻击机会?
  18. Septentrio:mosaic系列内置全功能Ntrip
  19. 4-10 阶乘计算升级版
  20. c语言交通违章编程代码,C语言程序设计之交通处罚单管理系统报告(内含代码)...

热门文章

  1. hp原装usb无线打印服务器,从USB转换到无线 | 无线打印中心 | 惠普中国
  2. linux C++ socket编程 实例
  3. Java随笔记 - BIO Socket 编程实例
  4. jar包里面文件修改
  5. 如何选择网页更新提醒工具
  6. 一个简单的鼠标钩子程序
  7. 光盘版的DOS启动盘
  8. Ext.grid.EditorGridPanel点击单元格改变数据,动态添加列
  9. ctfmon是什么启动项_Windows7系统启动项里没有ctfmon.exe怎么办?
  10. dell服务器分区表修复,完美恢复原产Dell Recovery软件、修复环境(添加教程)