当前位置: 首页 > news >正文

【数据处理与统计分析】2.Numpy库介绍以及使用

一.Numpy简介

1.简介

  • NumPy(Numerical Python)是Python数据分析必不可少的开源的第三方科学计算库,用于快速处理任意维度的数组

  • NumPy的出现一定程度上解决了Python运算性能不佳的问题,对于同样的数值计算任务,使用Numpy比直接使用Python要简洁的多 ,同时提供了更加精确的数据类型,使其具备了构造复杂数据类型的能力。

  • 本身是由C语言开发,是个很基础的扩展,NumPy被Python其它科学计算包作为基础包,因此理解np的数据类型对python数据分析十分重要。

  • NumPy重在数值计算,主要用于多维数组(矩阵)处理的库。用来存储和处理大型矩阵,比Python自身的嵌套列表结构要高效的多

2.重要功能

  • 高性能科学计算和数据分析的基础包

  • ndarray:对象来处理多维数组,该对象是一个快速而灵活的大数据容器 ;多维数组,具有矢量运算能力,快速、节省空间

  • 矩阵运算,无需循环,可完成类似Matlab中的矢量运算

  • 用于读写磁盘数据的工具以及用于操作内存映射文件的工具

二.Numpy的属性

NumPy的数组类被称作ndarray,通常被称作数组,它有如下属性:

  • ndarray.ndim 数组轴的个数(几维数组, 轴就是几)

  • ndarray.shape 数组的维度

  • ndarray.size 数组元素个数

  • ndarray.dtype 数组元素类型

  • ndarray.itemsize 数组每个元素的占用字节数

数组的维度:这是一个指示数组在每个维度上大小的整数元组。例如一个n排 m列的矩阵,它的shape属性将是(2,3),这个元组的长度显然是秩,即维度或者ndim属性

ndarray与Python原生list运算效率对比:

在这里通过一段代码运行来体会到ndarray的好处

import random import time import numpy as np a = [] for i in range(100000000): a.append(random.random()) # 通过%time魔法方法, 查看当前行的代码运行一次所花费的时间 %time sum1=sum(a) ​ b=np.array(a) ​ %time sum2=np.sum(b)

其中第一个时间显示的是使用原生Python计算时间,第二个内容是使用numpy计算时间:

CPU times: user 852 ms, sys: 262 ms, total: 1.11 s Wall time: 1.13 s CPU times: user 133 ms, sys: 653 µs, total: 133 ms Wall time: 134 ms

从中看到ndarray的计算速度要快很多,节约了时间

机器学习的最大特点就是大量的数据运算,那么如果没有一个快速的解决方案,那可能现在python也在机器学习领域达不到好的效果

Numpy专门针对ndarray的操作和运算进行了设计,所以数组的存储效率和输入输出性能远优于Python中的嵌套列表,数组越大,Numpy的优势就越明显

三.Numpy的ndarray的创建

1.ndarray介绍

  • NumPy数组是一个多维的数组对象(矩阵),称为ndarray(N-Dimensional Array)

  • 具有矢量算术运算能力和复杂的广播能力,并具有执行速度快和节省空间的特点

  • 注意:ndarray的下标从0开始,且数组里的所有元素必须是相同类型

2.ndarray的优势

内存块风格

ndarray到底跟原生python列表有什么不同呢,请看一张图

从图中可以看出ndarray在存储数据的时候,数据与数据的地址都是连续的,这样就给使得批量操作数组元素时速度更快

这是因为ndarray中的所有元素的类型都是相同的,而Python列表中的元素类型是任意的,所以ndarray在存储元素时内存可以连续,而python原生list就只能通过寻址方式找到下一个元素,这虽然也导致了在通用性能方面Numpy的ndarray不及Python原生list,但在科学计算中,Numpy的ndarray就可以省掉很多循环语句,代码使用方面比Python原生list简单的多

ndarray支持并行化运算(向量化运算)

numpy内置了并行运算功能,当系统有多个核心时,做某种计算时,numpy会自动做并行计算

效率远高于纯Python代码

Numpy底层使用C语言编写,内部解除了GIL(全局解释器锁),其对数组的操作速度不受Python解释器的限制,所以,其效率远高于纯Python代码

3.演示ndarray数组的创建方式

(1).array函数

(2).arange()函数

(3).创建随机数矩阵(绘图专用 )

(4).创建等比数列

(5).创建等差数列

(6).zeros() /ones()/empty()

  • 函数zeros创建一个全是0的数组

  • 函数ones创建一个全1的数组

  • 函数empty创建一个内容随机并且依赖于内存状态的数组

  • 默认创建的数组类型(dtype)都是float64

zero1 = np.zeros((3, 4)) # 3个一维数组, 每个长度为: 4 print('数组zero1: ', zero1) ones1 = np.ones((2, 3, 4)) # 2个二维数组, 每个二维数组有3个一维数组, 每个一维数组有4个元素1, 整体放入1个数组中 print('数组one1: ', ones1) empty1 = np.empty((2, 3)) print('数组empty1: ', empty1) print(zero1.dtype, ones1.dtype, empty1.dtype)

3.Numpy中的数据类型转换

dtype是numpy.dtype类型,先看看对于数组来说都有哪些类型:

名称描述简写
np.bool用一个字节存储的布尔类型(True或False)'b'
np.int8tinyint一个字节大小,-128 至 127'i'
np.int16smallint整数,-32768 至 32767'i2'
np.int32int整数,-2^31​ 至 2^32 -1'i4'
np.int64bigint整数,-2^63 至 2^63 - 1'i8'
np.uint8tinyint unsigned无符号整数,0 至 255'u'
np.uint16smallint unsigned无符号整数,0 至 65535'u2'
np.uint32无符号整数,0 至 2^32 - 1'u4'
np.uint64无符号整数,0 至 2^64 - 1'u8'
np.float16半精度浮点数:16位,正负号1位,指数5位,精度10位'f2'
np.float32float单精度浮点数:32位,正负号1位,指数8位,精度23位'f4'
np.float64double双精度浮点数:64位,正负号1位,指数11位,精度52位'f8'
np.complex64复数,分别用两个32位浮点数表示实部和虚部'c8'
np.complex128复数,分别用两个64位浮点数表示实部和虚部'c16'
np.object_python对象'O'
np.string_字符串'S'
np.unicode_unicode类型(字符串)'U'

常用的几个:

np.int32:32位整数,是最常用的整数类型,适用于大多数整数运算。

np.float64:64位浮点数,是默认的浮点数类型,广泛用于科学计算。

np.bool_:布尔类型,用于表示True或False,常用于条件判断和逻辑操作。

np.string_/np.unicode_:定长字符串类型,常用于二进制数据 或 多语言文本数据

np.object_:用于存储任意Python对象,特别是在处理混合类型数据或需要灵活性的时候。

np.string_只支持ASCII编码,不支持Unicode,而np.unicode_支持Unicode字符。

np.string_更适合处理旧有的二进制数据,而np.unicode_更适合处理现代文本数据

创建数组的时候可指定类型,若不指定,整数默认int64/int32,小数默认float64/float32, 具体由操作系统决定

四.Numpy的常用函数

1.基本函数

  • np.ceil(): 向上最接近的整数,参数是 number 或 array
  • np.floor(): 向下最接近的整数,参数是 number 或 array
  • np.rint(): 四舍五入,参数是 number 或 array
  • np.isnan(): 判断元素是否为 NaN(Not a Number),参数是 number 或 array
  • np.multiply(): 元素相乘,参数是 number 或 array
  • np.divide(): 元素相除,参数是 number 或 array
  • np.abs():元素的绝对值,参数是 number 或 array
  • np.where(condition, x, y): 三元运算符,x if condition else y

# 注意: 需要注意multiply/divide 如果是两个ndarray进行运算 shape必须一致

[[ 1. -0. -0. 1.] [-1. 1. -1. 2.] [-1. 1. 1. 2.]] [[ 0. -1. -1. 0.] [-2. 0. -2. 1.] [-2. 0. 0. 1.]] [[ 1. -1. -1. 1.] [-2. 1. -2. 1.] [-2. 0. 0. 1.]] [[False False False False] [False False False False] [False False False False]] [[3.61741385e-01 3.66874726e-01 3.94946697e-01 5.86773282e-01] [2.44408762e+00 2.69815493e-01 2.79949616e+00 1.68230211e+00] [2.61260897e+00 1.05492159e-02 1.22631605e-03 2.22582768e+00]] [[1. 1. 1. 1.] [1. 1. 1. 1.] [1. 1. 1. 1.]] [[0.6014494 0.60570185 0.62844785 0.76601128] [1.5633578 0.51943767 1.67316949 1.29703589] [1.6163567 0.10270938 0.0350188 1.4919208 ]] [[ 1 -1 -1 1] [-1 1 -1 1] [-1 1 1 1]]

2. 统计函数

  • np.mean(), np.sum():所有元素的平均值,所有元素的和,参数是 number 或 array
  • np.max(), np.min():所有元素的最大值,所有元素的最小值,参数是 number 或 array
  • np.std(), np.var():所有元素的标准差,所有元素的方差,参数是 number 或 array
  • np.argmax(), np.argmin():最大值的下标索引值,最小值的下标索引值,参数是 number 或 array
  • np.cumsum(), np.cumprod():返回一个一维数组,每个元素都是之前所有元素的 累加和 和 累乘积,参数是 number 或 array

# 多维数组默认统计全部维度,axis参数可以按指定轴心统计,值为0则按列统计,值为1则按行统计。

3.去重函数

4.排序函数

五.Numpy运算

1.基本运算(一维数组的运算)

两个ndarray, 一个是arr_A 另一个是arr_B

它们俩之间进行 arr_A + arr_B或 arr_A - arr_B或 arr_A * arr_B这样计算的前提是 shape相同

计算的时候, 位置对应的元素 进行 加减乘除的计算, 计算之后得到的结果的shape 跟arr_A /arr_B 一样

2.矩阵运算

(1).矩阵A的行列数 = 矩阵B的行列数

np.multiply()

(2).矩阵A的列数 = 矩阵B的行数

【 上一篇】数据处理与统计分析】1.Python数据处理分析环境搭建&jupyter&配置PyCharm连接Anaconda

【下一篇】【数据处理与统计分析】3.Pandas介绍以及使用

http://www.jsqmd.com/news/691525/

相关文章:

  • 2026拉勾网JA4+指纹反爬机制突破:10万条岗位数据分析实战
  • 2026年合肥最好吃火锅电话查询推荐:精选推荐与使用指南 - 品牌推荐
  • RISC-V微架构侧信道攻击检测技术解析
  • nli-MiniLM2-L6-H768真实案例:跨境电商产品描述多国语言主题归类
  • C语言实现消消乐游戏(8)
  • 告别命令行!在VSCode里一键调试你的Vue3 + Element Plus项目(附完整launch.json配置)
  • 【C++26合约编程成本控制白皮书】:20年架构师亲授——规避隐性开销的7大编译期拦截策略
  • 终极指南:3步掌握哔哩下载姬,轻松获取8K超清B站视频
  • 解决方案:构建基于电话号码的地理位置定位系统
  • 2026年南通地区靠谱的考研复试机构排名,哪家性价比高 - 工业品牌热点
  • OpenSceneGraph + 符号 + 渲染器管线
  • 太阳能板最大面积
  • 【数据处理与统计分析】3.Pandas介绍以及使用
  • 健身打卡信用上链程序,打卡记录不能篡改,可用于自律证明,公司激励,社群挑战,杜绝P图作弊。
  • 探讨2026年膨润土知名厂家,信阳同创膨润土厂服务如何 - mypinpai
  • Oumuamua-7b-RP步骤详解:Web UI中调整Top-k=30提升角色专注度实操
  • TVA时代企业IT工程师的转型之路(七)
  • 如何选择美白防晒霜品牌?2026年4月推荐评测口碑对比知名户外运动防汗防水黑 - 品牌推荐
  • Qwen3-4B-Thinking多场景落地:新能源电池技术文档智能问答系统
  • trimesh检测物体相撞
  • 从MP3到WAV:给嵌入式开发者的音频格式转换实战指南(附C语言代码与内存优化技巧)
  • 写代码时频繁打喷嚏?别信“有人想你”,这是身体系统的预警日志
  • 如何高效重置JetBrains IDE试用期:专业开发者的完整指南
  • 多品牌PLC兼容方案:C#上位机同时对接西门子、三菱、欧姆龙设备
  • 膨润土定制服务商家信阳同创膨润土厂费用怎么收 - 工业设备
  • 跳出“暴力美学”:一个模块化、类脑的大模型架构构想(大模型的思考:三)
  • Claude Code CLI常见生产环境指令开发项目入门学习0-1
  • CSRF与SSRF:Web安全漏洞攻防解析
  • NVIDIA Profile Inspector 深度指南:解锁显卡隐藏性能的专业调校工具
  • 安卓播放器选型实战:从VLC、ExoPlayer到GSYVideoPlayer,我是如何为RTSP直播项目做决定的