Python数据分析讲课笔记02:Numpy基础

news2024/11/24 14:30:58

文章目录

  • 零、学习目标
  • 一、NumPy概述
  • 二、多维数组对象
  • 三、创建NumPy多维数组
    • 1、利用array()函数创建NumPy数组
    • 2、创建NumPy数组的其它函数
      • (1)利用zeros函数创建元素全为0的数组
      • (2)利用ones函数创建元素全为1的数组
      • (3)利用empty函数创建数组
      • (4)arange函数是Python内置函数range的数组值版本
    • 3、创建数组函数表
    • 4、数组元素的数据类型
  • 四、NumPy数组运算
    • 1、数组与数组算术运算
    • 2、数组与标量算术运算
    • 3、数组与数组关系运算
    • 4、数组与标量关系运算
    • 5、广播概述
  • 五、基本索引与切片
    • 1、NumPy一维数组索引与切片
    • 2、NumPy二维数组索引与切片
  • 六、Numpy函数
    • (一)数学函数
    • (二)统计函数
      • 1、最大值与最小值函数 - amax, amin
      • 2、求最大值与最小值之差函数 - ptp
      • 3、统计百分位函数 - percentile
      • 4、中位数函数median和平均数函数mean
      • 5、加权平均函数 - average
      • 6、方差函数var与标准差函数std
    • (三)排序函数
  • 七、扩展练习
    • 1、任务:二维随机数组取绝对值
      • 方法一、利用条件切片
      • 方法二、利用np.abs()函数
    • 2、任务:求解三元一次方程组

零、学习目标

  1. 掌握NumPy多维数组的创建
  2. 掌握NumPy多维数组的运算
  3. 掌握NumPy的基本索引与切片
  4. 熟悉NumPy的数学、统计与排序函数

一、NumPy概述

NumPy(Numerical Python)是Python的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表(Nested List Structure)结构要高效得多,该结构也可以用来表示矩阵(Matrix),支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库 。

NumPy数组占用内存比Python内置序列要少得多,数组运算无须Python的for循环,当然计算效率更更高。
在这里插入图片描述

二、多维数组对象

NumPy的ndarray是保存Python大数据集的快速灵活的容器。NumPy数组运算类似于Python标量运算。

  • 创建一个二行三列的二维随机数组
    在这里插入图片描述

  • 进行翻倍运算
    在这里插入图片描述

  • 进行自相加运算
    在这里插入图片描述

  • 如果换成Python的二维列表来处理翻倍运算,那就会十分繁琐,演示如下:
    在这里插入图片描述

  • 由上可知,如果二维列表乘上2,不是每个元素翻倍,而是将元素个数翻倍了,由两行三列扩展成四行三列,前两行与后两行完全相同。

  • 正确的做法如下所示:先通过嵌套列表解析得到元素翻倍的普通列表,然后再将普通列表转换成二维列表。
    在这里插入图片描述

  • 一个ndarray是一个同类型数据的通用多维容器,那就是说数组的所有元素必须是相同类型。每一个数组都有一个shape属性,表示每维大小的元组,还有一个dtype属性,描述数组的数据类型。
    在这里插入图片描述

三、创建NumPy多维数组

1、利用array()函数创建NumPy数组

  • array()函数接收任何序列对象,或者其它数组。

  • 由列表创建NumPy一维数组
    在这里插入图片描述

  • 由嵌套列表创建NumPy二维数组
    在这里插入图片描述

  • 由嵌套列表data2生成的数组arr2是二维数组,三行四列,可以通过shape、dtype和ndim属性来获取相关信息;除非显式指定,np.array试图推断出它所创建数组的类型。数据类型保存在dtype元数据对象里。

在这里插入图片描述

2、创建NumPy数组的其它函数

  • 除了用np.array,还有不少其它创建新数组的函数,比如zeros、ones、empty函数,要用这些方法创建高维数组,传入一个元组指定数组的shape。

(1)利用zeros函数创建元素全为0的数组

在这里插入图片描述

(2)利用ones函数创建元素全为1的数组

在这里插入图片描述

(3)利用empty函数创建数组

在这里插入图片描述

  • 假定np.empty会返回全1或全0的数组,在某些情况下,可能会返回没有初始化的垃圾值。

(4)arange函数是Python内置函数range的数组值版本

在这里插入图片描述

  • NumPy专注于数值计算,如果不指定,整数默认类型是int32,实数默认类型是float64。
    在这里插入图片描述
  • 当然在创建数组时可以根据需要指定数组类型
    在这里插入图片描述

3、创建数组函数表

在这里插入图片描述

  • asarray()函数
    在这里插入图片描述
  • zeros_like()与ones_like()函数
    在这里插入图片描述
  • full()函数
    在这里插入图片描述
  • 产生单位矩阵 - eye()与identity()函数
    在这里插入图片描述

4、数组元素的数据类型

在这里插入图片描述

  • ndarray数组类型是保存在dtype属性里的
    在这里插入图片描述
  • float64,双精度实数,8个字节,64位
  • float32,单精度实数,4个字节,32位
    在这里插入图片描述
  • 类型转换演示
    在这里插入图片描述
  • 当然有些时候类型转换会失败
    在这里插入图片描述

四、NumPy数组运算

NumPy数组可以进行不用for循环进行批量数据操作,用户称之为向量化。

1、数组与数组算术运算

  • 相同尺寸的数组进行算术运算,是逐个元素进行相应的运算。
    在这里插入图片描述

2、数组与标量算术运算

  • 不仅数组与数组可以进行四则运算,而且数组与标量也可以进行四则运算
    在这里插入图片描述

3、数组与数组关系运算

  • 数组与数组,不仅可以进行算术运算,还可以进行关系运算
    在这里插入图片描述

4、数组与标量关系运算

  • 甚至,数组与标量也可以进行关系运算
    在这里插入图片描述

5、广播概述

  • 不同尺寸数组进行的运算,称之为广播(broadcasting)。

在这里插入图片描述

五、基本索引与切片

NumPy数组索引操作是个丰富的话题,有很多不同的方式去选择数组的子集或单个元素。

1、NumPy一维数组索引与切片

  • NumPy一维数组索引操作很简单,表面上看起来类似于Python的列表索引操作。
    在这里插入图片描述
  • 在NumPy里,可以对切片赋一个列表,也可以赋一个标量,而Python的列表切片(元素个数超过1个)是不能赋一个标量。
    在这里插入图片描述
  • NumPy数组与Python列表在切片上还有一个不同,NumPy数组切片是原数组的“视图”,视图上的修改会反映到原数组上。
    在这里插入图片描述
    在这里插入图片描述
  • 如果希望数组切片上的操作不影响原数组,那么利用copy方法来生成一个切片备份就可以。

在这里插入图片描述

2、NumPy二维数组索引与切片

在这里插入图片描述

  • 对于二维数组,单索引访问到的是一维数组,比如arr2d[1]访问的第二行[1, 4, 9]。
    在这里插入图片描述
  • 访问二维数组的某个元素,有两种做法
    在这里插入图片描述

六、Numpy函数

(一)数学函数

  • add 求和
  • subtract 求差
  • multiply 求积
  • divide 求商
  • power 求幂
  • remainder 求余
    在这里插入图片描述

(二)统计函数

1、最大值与最小值函数 - amax, amin

在这里插入图片描述

2、求最大值与最小值之差函数 - ptp

在这里插入图片描述

3、统计百分位函数 - percentile

在这里插入图片描述

4、中位数函数median和平均数函数mean

在这里插入图片描述

5、加权平均函数 - average

在这里插入图片描述

6、方差函数var与标准差函数std

在这里插入图片描述

(三)排序函数

  • sort函数
    在这里插入图片描述
    在这里插入图片描述
    假设一个团队有5名学员,成绩如下表所示。用NumPy统计他们在语文、英语和数学的平均成绩、最小成绩、最大成绩、方差和标准差。然后按照总成绩排序,得出名次,输出成绩。
    在这里插入图片描述
  • 创建程序 - 统计成绩.py
    在这里插入图片描述
# -*- coding: utf-8 -*-
"""
Created on Thu Oct 22 18:01:53 2020

@author: howard

统计成绩
"""

import numpy as np

stutype = np.dtype({
    'names': ['name', 'chinese', 'math', 'english'],
    'formats': ['S32', 'i', 'i', 'i', 'i']})

students = np.array([('mike', 95, 80, 78),
                     ('alice', 87, 90, 80),
                     ('green', 93, 78, 72),
                     ('brown', 89, 95, 84),
                     ('brian', 60, 90, 89)], dtype=stutype) 

chinese = students[:]['chinese']
math = students[:]['math']
english = students[:]['english']

def show(name, subject):
    print("{} | {:^6.2f} | {:^6.1f} | {:^6.1f} | {:^6.2f} | {:^6.2f}".format(name, np.mean(subject),
          np.amax(subject), np.amin(subject), np.var(subject), np.std(subject)))
    
print('科目 | 平均分 | 最高分 | 最低分 | 方差    | 标准差')
show('语文', chinese)
show('数学', math)
show('英语', english)   
print()

print("姓名 | 语文  | 数学 | 英语 | 总分")
rankings = sorted(students, key=lambda x: x[1]+x[2]+x[3])
for ranking in rankings:
    print("{:5s}|{:^6d}|{:^6d}|{:^6d}|{:^6d}".format(ranking['name'].decode('utf-8'), ranking['chinese'], ranking['math'], ranking['english'],
          ranking['chinese'] + ranking['math'] + ranking['english']))
  • 运行程序,查看结果
    在这里插入图片描述
  • 如果按照单科排序,那么可以直接利用np.sort方法,指定order属性值即可。
    在这里插入图片描述
  • 可以看到确实按数学成绩升序排列:78、80、90、90、95
  • 如果要数学成绩降序排列,可以这样来做:
    在这里插入图片描述

七、扩展练习

1、任务:二维随机数组取绝对值

方法一、利用条件切片

在这里插入图片描述

方法二、利用np.abs()函数

在这里插入图片描述

2、任务:求解三元一次方程组

{ x + 2 y + 3 z = 14 ( 1 ) 2 x − 4 y + z = − 3 ( 2 ) 3 x + 5 y − 2 z = 7 ( 3 ) \begin{cases} x + 2y + 3z = 14 &(1)\\ 2x -4y +z = -3 &(2)\\ 3x + 5y - 2z = 7 &(3) \end{cases} x+2y+3z=142x4y+z=33x+5y2z=7(1)(2)(3)
在这里插入图片描述

# -*- coding: utf-8 -*-
"""
Created on Thu Oct 22 18:09:11 2020

@author: howard

求解三元一次方程组
"""

import numpy as np

A = np.array([[1, 2, 3],
              [2, -4, 1],
              [3, 5, -2]])
B = np.array([[14],
              [-3],
              [7]])

X = np.dot(np.linalg.inv(A), B)
print('x1 = {:.2f}\nx2 = {:.2f}\nx3 = {:.2f}'.format(X[0, 0], X[1, 0], X[2, 0]))
print()

X = np.linalg.inv(A).dot(B)
print('x1 = {:.2f}\nx2 = {:.2f}\nx3 = {:.2f}'.format(X[0, 0], X[1, 0], X[2, 0]))
print()

X = np.linalg.solve(A, B)
print('x1 = {:.2f}\nx2 = {:.2f}\nx3 = {:.2f}'.format(X[0, 0], X[1, 0], X[2, 0]))

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

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

相关文章

时间序列异常检测:统计和机器学习方法介绍

在本文中将探索各种方法来揭示时间序列数据中的异常模式和异常值。 时间序列数据是按一定时间间隔记录的一系列观测结果。它经常在金融、天气预报、股票市场分析等各个领域遇到。分析时间序列数据可以提供有价值的见解,并有助于做出明智的决策。 异常检测是识别数…

增加内容曝光、获得更多粉丝 - 「评论发红包」功能

目录 博客发放以及领取红包规则 1. 发布博客评论社区红包规则: 2. 博客评论红包领取规则 如何发红包评论? 发布红包评论益处 不知道大家有没有注意到,我们的「评论发红包」功能已经上线啦~ 现在几乎所有的内容 -- 博客&…

管理类联考——英语——技巧篇——完型填空——经典方法论

放弃完型填空,意味着你的阅读部分得分至少能稳定在34分以上(满分40分,要得34分以上意味着至多只能错3道题),且其他题型也发挥不错,才能确保总分是一个不错的分数。然而,翻译和写作考查的都是硬实力,新题型自…

解释器模式(二十三)

相信自己,请一定要相信自己 上一章简单介绍了 备忘录模式(二十二), 如果没有看过, 请观看上一章 一. 解释器模式 引用 菜鸟教程里面 解释器模式介绍: https://www.runoob.com/design-pattern/interpreter-pattern.html 解释器模式(Interpreter Patter…

科研热点|影响因子发布时间确定,AHCIESCI将首获IF~

根据科睿唯安(Clarivate)官方公众号消息,2023年度《期刊引证报告》(Journal Citation Reports,简称JCR)即将于今年6月底正式发布! 本年度JCR将对Web of Science核心合集收录的所有期刊赋予期刊…

C语言指针讲解(适用于初学者)

本文参考视频: https://b23.tv/xLOG6SV,相当于学习笔记,这样概念混淆的时候也可以看看。 一.一级指针 以下图表示的意思是: a的地址为0XA0,定义一个指针p,指向a的地址,计算机也会给p一个内存空间&p:0XB0 图中&a…

【机器学习】十大算法之一 “KNN”

作者主页:爱笑的男孩。的博客_CSDN博客-深度学习,活动,python领域博主爱笑的男孩。擅长深度学习,活动,python,等方面的知识,爱笑的男孩。关注算法,python,计算机视觉,图像处理,深度学习,pytorch,神经网络,opencv领域.https://blog.csdn.net/Code_and516?typeblog个…

疑似有用户安装Win11六月更新之后,无法打开Chrome浏览器

近日有网友表示,在安装6月更新的KB5027231之后,无法打开Chrome浏览器了,并且在任务管理器中可以看到相关**ERP系统**进程,但是 Chrome浏览器无法显示。 据了解,微软在本月的补丁星期二活动中,面向Win11发布…

MySQL:多表查询(全面详解)

MySQL:多表查询 前言附录:常用的 SQL 标准有哪些一、一个案例引发的多表连接1、案例说明2、笛卡尔积(或交叉连接)的理解3、案例分析与问题解决 二、多表查询分类讲解1、等值连接 vs 非等值连接1.1 等值连接1.2 非等值连接 2、自连…

chatgpt赋能python:使用Python生成应用的SEO

使用Python生成应用的SEO 在当今数字化时代中,拥有一个优化良好的应用程序对于任何企业都是至关重要的。 SEO(搜索引擎优化)是一个崭新且不断发展的领域,它对于企业非常具有建设性。在本文中,我们将学习如何使用Pytho…

CADisplayLink前世今生

本文字数:19803字 预计阅读时间:50分钟 用最通俗的语言,描述最难懂的技术 前情描述 上周同事做code review的时候说到了CADisplayLink的一些变化,感触颇深,提到了接口的一些变动,现在就自己的一些理解加上网…

全志V3S嵌入式驱动开发(spi-nand驱动)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 nand flash相信大家并不陌生,现在很多的固态硬盘上面,其实有很多的nand flash。只不过根据存储单元,分成slc、m…

人机融合与因果关系

苏格兰哲学家大卫.休谟认为因果关系很难被认识,主要是因为他认为我们的认识是通过经验得来的,而经验只能告诉我们事件的先后顺序,而不能告诉我们事件之间的必然联系。他提出了“常见的联想”(常见的经验)和“原则的联想…

使用 MATLAB 进行气象激光雷达图像分析(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

状态模式(二十四)

相信自己,请一定要相信自己 上一章简单介绍了 解释器模式(二十三), 如果没有看过, 请观看上一章 一. 状态模式 引用 菜鸟教程里面 状态模式介绍: https://www.runoob.com/design-pattern/state-pattern.html 在状态模式(State Pattern)中&…

go常用特性(embed、插件化开发)、常用包(并发)

go常用特性及常用包 1 常用特性 1.1 go:build //go:build !windows //go:build是前缀指令,!windows是逻辑判断的条件。这个指令的作用是在Windows系统外,编译当前源文件。// build !windows // build是前缀指令,!windows是编译标记。这个指…

CSDN如何获得铁粉?

🌷🍁 博主 libin9iOak带您 Go to New World.✨🍁 🦄 个人主页——libin9iOak的博客🎐 🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~&#x1f33…

springboot+vue的校园疫情防控系统(附数据库,源码)

💕💕作者:程序员徐师兄 个人简介:7 年大厂程序员经历,擅长Java、微信小程序、Python、Android等,大家有这一块的问题可以一起交流! 各类成品java毕设 。javaweb,ssh,ssm&…

责任链模式(二十六)

相信自己,请一定要相信自己 上一章简单介绍了策略模式(二十五), 如果没有看过, 请观看上一章 一. 责任链模式 引用 菜鸟教程里面的责任链模式介绍: https://www.runoob.com/design-pattern/chain-of-responsibility-pattern.html 顾名思义,责任链模式…

Science Advance||个体动态脑中鲁棒的大脑状态

文章目录 个体化动态方法(INSCAPE 方法):(A)生成脑共同激活状态的组模板:(B)个体水平分析: 不同的大脑状态有特定的协同激活模式(coactivation patterns&…