python学习——numpy库的使用[超详细的学习笔记]

news2025/8/9 5:05:53

目录

前言

1 导入及查看版本信息

2 数组的创建

2.1 基础数据类型转换为数组

2.2 数组内置方法

2.2.1 np.arange()  线性序列数组

2.2.2 np.linspace() 等差数组

2.2.3 np.logspace() 等比数组

2.2.4 np.zeros() 全零的数组

2.2.5 np.ons() 全一的数组 float型

2.2.6  np.zeros_like() 和**数组的shape一样,全零的数组

2.2.7  np.ones_like() 和**数组的shape一样,全一的数组

2.2.8 np.full() 返回给定形状和类型的新数组,填充fill_value

2.2.9 np.identity(),np.eye() 单位矩阵形成的数组

2.2.10 np.diag() 对角数组

2.2.11 np.empty() 空数组,元素取值随机

2.2.12 np.random 生成随机数组

3 数组属性

3.1 ndim  查看维度

3.2 shape查看尺寸

3.3 size 查看总元素

3.4 itemsize  查看数组每个元素大小

3.5 dtype  查看数组中元素类型

3.5.1 数据类型分类

3.5.2 数组数据类型的转换

3.5.3 缺失值:特殊的浮点型

 4 索引和切片

4.2 多维数组

5  数组的变形、拼接和分裂

5.1 reshape()  变换数组的形态,新生成

5.2 resize()  变换数组的形态,原地修改

5.3 shape()  变换数组的形态,原地修改

5.4 flatten()  展平,降维

5.5 ravel()  展平,降维

5.6 swapaxes()  转置

5.7 T  转置

5.8 np.concatenate() 拼接

5.9 np.vstack() 垂直堆叠数组,和np.concatenate((...),axis=0)一样

5.10 np.hstack() 水平堆叠数组,和np.concatenate((...),axis=1)一样

5.11 np.split() 分裂

5.12 np.vsplit(),和np.split(axis = 0)一样

5.13 np.hsplit(),和np.split(axis = 1)一样

6 数组的运算

6.1 数组与数值的运算

6.2 数组与数组的运算

6.2.1 基本运算函数

6.2.2 判断符

6.2.3 聚合函数

6.2.4 唯一化和集合逻辑

6.3 数组的广播机制

6.4 矩阵操作

6.4.1  矩阵创建

6.4.2  矩阵的转置与逆矩阵

6.4.3  矩阵的+-*/符合矩阵计算规则

6.4.4  矩阵的拼接

7 numpy数据的保存和读取

7.1 一个数组情况

7.1.1 np.save() 保存

7.1.2 np.load() 读取

7.2 多个数组情况

7.2.1 np.savez() 保存

7.2.2 np.load() 读取

8 使用numpy进行统计分析

8.1 排序 sort()

8.1.1 一维数组排序

8.1.2 多维数组排序

8.1.3 argsort()  从小到大排序,返回其相对应的索引值

8.2 unique() 去重复

8.3 重复

8.3.1 一维数组重复 

8.3.2 多维数组重复 

8.4 np.pad() 填充

8.5 常用统计函数

总结


前言

numpy是Python语言的一个扩展包 ,是 “ Numeric Python”的简称,它是一个由多维数组对象和用于处理数组的例程集合组成的库。

numpy 是Python数值计算中最重要的基础包,支持N维数组运算、处理大型矩阵、成熟的广播函数库、矢量运算、线性代数、傅里叶变换、随机数生成,也为数组运算提供大量的数学函数库。

与python原生array区别:

  1. NumPy 数组在创建时有固定的大小,更改ndarray的大小将创建一个新的数组并删除原始数据,不同于Python列表(可以动态增长)。
  2. NumPy 数组中的元素都需要具有相同的数据类型。
  3. 数组的元素如果也是数组(可以是 Python 的原生 array,也可以是 ndarray)的情况下,则构成了多维数组。
  4. NumPy 数组操作比使用Python的内置序列可能更有效和更少的代码执行。

1 导入及查看版本信息

import numpy as np   #导入numpy并简写为np
print(np.__version__)#查看版本

2 数组的创建

numpy中定义的最重要的对象是称为ndarray的N维数组类型。ndarray中的每个元素在内存中使用相同大小的块,它描述相同类型的元素集合。

a=np.array([1,2,3,4])#把列表转换为数组
type(a)#类型

#out: numpy.ndarray

2.1 基础数据类型转换为数组

np.array([1,2,3,4])#列表转换为数组
np.array((1,2,3,4))#把元组转换为数组
np.array(range(5))#range对象转换成数组

#out:array([1, 2, 3, 4])
# 数组转为列表
a = np.array([1,2,3,4])
a.tolist()

#out:[1, 2, 3, 4]

2.2 数组内置方法

2.2.1 np.arange()  线性序列数组

用来创建一个线性序列的数组,在给定间隔内返回均匀间隔的值。
arange([start,] stop[, step,], dtype=None)

np.arange(0,10,2)  #开始,结束,步长,左闭右开
#out:array([0, 2, 4, 6, 8])

2.2.2 np.linspace() 等差数组

np.linspace(start, stop, num=50, endpoint=True)

在指定的间隔内返回均匀间隔的数字,用作相同间隔采样。
start:标量,序列的起始值。
stop:标量,除非"endpoint"设置为False,否则为序列的结束值。
num:int,可选。要生成的样本数。默认值为50.必须为非负数。     

2.2.3 np.logspace() 等比数组

2.2.4 np.zeros() 全零的数组

2.2.5 np.ons() 全一的数组 float型

2.2.6  np.zeros_like() 和**数组的shape一样,全零的数组

2.2.7  np.ones_like() 和**数组的shape一样,全一的数组

2.2.8 np.full() 返回给定形状和类型的新数组,填充fill_value

np.full(shape,fill_value,dtype = None)
shape:int或int的序列新数组的形状,例如(2,3) 或2 。
fill_value:标量填充值。
dtype:数据类型,可选数组所需的数据类型默认值为"None"。

2.2.9 np.identity(),np.eye() 单位矩阵形成的数组

返回一个二维数组,其中对角线为1,其余为零的二维数组。

 

2.2.10 np.diag() 对角数组

2.2.11 np.empty() 空数组,元素取值随机

 2.2.12 np.random 生成随机数组

  • np.random.randint() 随机整数,左闭右开

语法:randint(low, high=None, size=None, dtype)

  • np.random.rand() ,np.random.random()  0到1之间随机浮点数

语法:np.random.rand(size=None) / np.random.random(size=None)
返回随机浮点数,在半开区间[0.0,1.0)中

  • np.random.uniform() 指定区间之间随机浮点数

语法:np.random.uniform(low=0.0, high=1.0, size=None)
返回随机浮点数,在半开区间[a,b)中。

  •  np.random.seed()    随机数种子

np.random.seed(Num)可以设置一组种子值,确保每次程序执行的时候都可以生成同样的随机数组。

 

  •  np.random.randn(),np.random.standard_normal() 标准正态分布

均值为0,标准差为1的标准正态分布

  •  np.random.normal() 正态分布

语法:normal(平均值,标准偏差,形状)
作用:从正态分布中抽取随机样本。
如果平均值为0,标准差为1,或者不写这两个参数,就等同于标准正态分布np.random.randn()

  •  np.random.shuffle() 混洗其内容来就地修改序列,没有返回值

3 数组属性

属性说明
ndim返回int,表示数组的维数
shape返回tuple,表示数组的尺寸
size返回int,表示数组的总元素
dtype返回data-type,描述数组中元素类型
itemsize返回int,表示数组每个元素的大小(字节为单位)

基于以下两个数组,查看各个属性的使用方法:

 

3.1 ndim  查看维度

3.2 shape查看尺寸

  • 如果是一维的数组,返回一个元素所构成的元组。
  • 如果是二维的数组,返回(行数,列数)的元组。 例如:(2, 4)该二维数组是二行四列,(该二维数组有2个一维数组组成,每个一维数组里 有4个元素)

3.3 size 查看总元素

维度数的乘积

3.4 itemsize  查看数组每个元素大小

3.5 dtype  查看数组中元素类型

NumPy 要求数组必须包含同一类型的数据。

a.dtype  #元素类型
#out: dtype('int32')

b.dtype
#out: dtype('int32')

3.5.1 数据类型分类

3.5.2 数组数据类型的转换

  1. 如果类型不匹配,NumPy 将会向上转换: 字符串>浮点数>整数 查看类型  
  2. ndarray.astype("数据类型名") 或者 ndarray.astype(np.数据类型名)
b=np.array([1,2.1,3,4])
b.dtype  #numpy存储数据一样,以位宽最大为准,自动向上转换
#out: dtype('float64')

 3.5.3 缺失值:特殊的浮点型

 只能用np.isnan() 来判断是否是空值

空值任何运算的结果均为空值

 4 索引和切片

4.1 一维数组的索引

从0开始的,并且接受负索引来从数组的结尾进行索引。

4.2 多维数组

每一个逗号, 代表索引的一个维度

可以使用切片和步长来截取不同长度的数组  x[start:stop:step]

5  数组的变形、拼接和分裂

变形展平转置拼接分裂
原地修改

shape()

resize()

新生成reshape() 

flatten()

ravel()

swapaxes()

T

concatenate()

vstack()

hstack()

split()

vsplit()

hsplit()

1. 一维数组 如果有一个操作需要设置轴,一维数组只有一个轴,也就是轴0
        axis=0 基本操作单位就是一维数组里的一个个元素
2. 二维数组 如果有一个操作需要设置轴,二维数组有两个轴,轴0和轴1
        axis=0 基本操作单位是二维数组里的一个个一维数组
        axis=1 基本操作单位是一维数组里的一个个元素
3. 三维数组 如果有一个操作需要设置轴,三维数组有三个轴,轴0、轴1和轴2
        axis=0 基本操作单位是三维数组里的一个个二维数组
        axis=1 基本操作单位是二维数组里的一个个一维数组
        axis=2 基本操作单位就是一维数组里的一个个元素

5.1 reshape()  变换数组的形态,新生成

使用ndarray.reshape()变形不会改变原有的数组形状,而是生成一个新的对象

在使用 reshape 时,可以将其中的一个维度指定为 -1,Numpy 会自动计算出它的真实值

 

5.2 resize()  变换数组的形态,原地修改

5.3 shape()  变换数组的形态,原地修改

5.4 flatten()  展平,降维

5.5 ravel()  展平,降维

数组的平铺,不管多少维,全部铺开变成一维

5.6 swapaxes()  转置

5.7 T  转置

5.8 np.concatenate() 拼接

concatenate((a1, a2, ...), axis=0, out=None) 沿现有轴加入一系列数组。
a1,a2,...:array_like的序列。除尺寸外,阵列必须具有相同的形状
axis:int,可选。数组将连接的轴。如果axis为None,数组在使用前是扁平的。默认值为0。

5.9 np.vstack() 垂直堆叠数组,和np.concatenate((...),axis=0)一样

5.10 np.hstack() 水平堆叠数组,和np.concatenate((...),axis=1)一样

 

5.11 np.split() 分裂

 语法:np.split(ary,indices_or_sections,axis = 0)
作用:将数组拆分为多个子数组。
  - ary:ndarray。
  - indices_or_sections:int或1-D数组。
      - 如果indices_or_sections是一个整数N,则数组将被分割沿着'轴'进入N个相等的数组。
      - 如果indices_or_sections是排序整数的1-D数组,则为条目指示数组被分割的“轴”的位置。
      - 如果索引超过沿“轴”的数组维度,相应地返回一个空的子数组。
axis:int,可选。要拆分的轴,默认为0。

5.12 np.vsplit(),和np.split(axis = 0)一样

语法:np.vsplit(ary,indices_or_sections)
作用:将数组垂直拆分为多个子数组(按行)。
'vsplit'相当于'split'用'axis = 0'来'拆分',数组总是沿着第一个轴分开,无论数组尺寸如何。

5.13 np.hsplit(),和np.split(axis = 1)一样

语法:np.hsplit(ary,indices_or_sections)
作用:将数组水平拆分为多个子数组(按列)。
'hsplit'相当于'split'用'axis = 1'来'拆分',数组总是沿着第二个分开,轴与阵列尺寸无关。

6 数组的运算

6.1 数组与数值的运算

数组与数值运算相当于每个元素都进行此运算

6.2 数组与数组的运算

6.2.1 基本运算函数

6.2.2 判断符

 

 

 6.2.3 聚合函数

 

 

  6.2.4 唯一化和集合逻辑

常用来 去重

 交集

 x数组元素是否包含y的布尔型数组

 

 并集

差集

 补集

6.3 数组的广播机制

广播机制:当我们使用通用函数对两个数组进行计算时,通用函数会对这两个数组的对应元素进行计算,因此它要求这两个数组shape相同。
如果shape不同的话,会进行如下的广播(broadcasting)处理:

  1. 让所有输入数组都向其中shape最长的数组看齐,shape中不足的部分都通过在前面加1补齐
  2. 输出数组的shape是输入数组shape的各个轴上的最大值
  3. 如果输入数组的某个轴和输出数组的对应轴的长度相同或者其长度为1时,这个数组能够用来计算,否则出错
  4. 当输入数组的某个轴的长度为1时,沿着此轴运算时都用此轴上的第一组值

6.4 矩阵操作

矩阵和数组的关系:矩阵是数组的子类(也有广播机制)

6.4.1  矩阵创建

 6.4.2  矩阵的转置与逆矩阵

 6.4.3  矩阵的+-*/符合矩阵计算规则

6.4.4  矩阵的拼接

7 numpy数据的保存和读取

7.1 一个数组情况

7.1.1 np.save() 保存

arr1 = np.arange(10).reshape(2,5)  #创建一个数组
np.save('arr1.npy',arr1)#保存的是单个数组

7.1.2 np.load() 读取

brr=np.load('arr1.npy')#读取文件
brr

7.2 多个数组情况

7.2.1 np.savez() 保存

arr1 = np.arange(12).reshape(3,4)  
arr2 = np.arange(10)
np.savez('arr12.npz',a1=arr1,a2=arr2)#保存的是两个数组到一个文件中

 7.2.2 np.load() 读取

8 使用numpy进行统计分析

8.1 排序 sort()

8.1.1 一维数组排序

8.1.2 多维数组排序

8.1.3 argsort()  从小到大排序,返回其相对应的索引值

8.2 unique() 去重复

8.3 重复

8.3.1 一维数组重复 

8.3.2 多维数组重复 

8.4 np.pad() 填充

8.5 常用统计函数

见  6.2.3 聚合函数 章节


总结

本文仅仅简单介绍了numpy库中常用的一些方法:数组的创建、属性、变换、切片、运算等,全文档请查看官方文档。

如果觉得这篇笔记对你有帮助,可以点赞,关注,收藏一下啦,我是刚刚迈上数据分析道路的小菜鸟,欢迎讨论学习,如本文知识点有误,请多多指教。

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

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

相关文章

浅谈数商云供应链协同系统物流管理功能在医疗器械行业的作用

近年来,我国医疗器械行业发展快速,但医疗器械物流作为医疗器械供应链中承上启下的重要环节,目前仍处于相对传统和粗放的发展阶段。随着国家经济的发展及人民对医疗健康需求的不断增加,医疗器械供应链与物流的升级已是大势所趋。 …

程序员在平台兼职接单,月入30K,方法我全写出来了!(附接单渠道和注意事项)

本月兼职的收入又到账了,程序员副业实在是太香了! 虽然这点小钱还远远达不到财富自由,也比不上那些真正的大佬,但在这个行业寒冬里,能有一笔相对稳定的收入,作为全职之外的补充,还是让人倍感踏实…

海棉结构sponge construction

海棉结构,或称海绵哈希,是当前密码学中一种重要构造结构,如当前sha-3采用的即是海绵结构。 海绵结构是一类具有有限内部状态的算法,可以将任意有限长的输入消息变成任意长度输出的消息摘要,其结构如下,其中…

docker-network网络

docker network网桥 作用:实现主机和容器之间可以通过网桥相互通信。 定义 正常不指定网络的情况下。所有的应用都跑在一个网桥上,影响其他应用的交互、网络传输。一般都是一个应用使用一个网桥,容器之间互通,则进行容器间通信的配置&…

粉丝提问:26想转行做Python开发,是不是已经晚了?

前言 26岁基本上是一个硕士研究生刚毕业的年纪,相当于本科毕业工作了2年,总体来说时间耽误的并不算太多,想转行做Python开发,不算太晚! (文末送读者福利) 1、转行前先想清楚这5点&#xff01…

【vue.js】使用高德地图选择省市区后,再点击确认当前选择的位置

成品展示 前期准备 先去高德开放平台申请一个web端的key。 2022年后申请的key,必须和它生成的secret一起使用。 可使用服务选择web端 在vue项目中,可以通过直接引入js文件,也可以安装vue-amap等插件使用。 使用 安装官方的js API 插件 …

数据治理系列:数仓建模之数仓主题与主题域

背景: 数据仓库之父 Bill Inmon 将数据仓库描述为一个面向主题的、集成的、稳定的、反应历史变化的数据集合,用于支持管理者的决策过程。 从上面的引言里面,我们其实可以知道主题在数仓建设里面绝对是很重要的一环,这的确是的。…

警惕,11月这6本期刊已被剔除SCI/SSCI

2022年11月22日晚,科睿唯安更新了Web of Science核心期刊目录,SCIE/SSCI期刊数据库剔除(Dropped)或停止检索(Ceased)了6本期刊,被剔除的6本期刊中,有4本期刊是信息更改,其中1本期刊更改了名称和ISSN号,2本期…

S4 image save:save_image_lzo函数分析

save_image_lzo函数分析 save_image_lzo在S4中运行,运于保存image数据,函数的调用逻辑如下: hibernate()->swsusp_write()->save_image_lzo()1. 基本流程 该函数实现了S4中内核image压缩的功能,大致流程如下图所示&#…

35+程序员该怎么办?有哪些破局方法?

在互联网行业一直有一种说法,如果35岁还没到管理岗,基本就是被裁的命运了。作为互联网行业的主力军,程序员的职业发展,也被人总结成,三年升高工、七年做架构、十年送外卖。虽然是个段子,也透露了大家对于年…

Python列表类型详解

今天继续给大家介绍Python相关知识,本文主要内容是Python列表类型 一、列表类型定义与创建 在Python中,列表类型是序列类型的一种,也是一种非常重要、非常常用的数据类型。列表使用方括号[]或list()函数创建,列表中的元素使用逗…

如何转变固定资产管理方式,让企业降本增效?

作为企业资产的重要组成部分,固定资产管理直接影响到企业的运营和核心的支出。固定资产的科学管理是企业管理者很关心问题。传统的纸质表格固定资产管理方式,通常是企业在成立之初采取的方式。因为成立之初企业需要节省成本,而且资产数量和种…

Android入门第33天-Android里的弹出式对话框

简介 Android Studio里在4.0前有一种ProgressDialog,这个已经淘汰了。我们完全可以使用ProgressBar来取代。但是还有一种Dialog叫PopWindow,它是一种“可阻塞式Dialog”。即弹出后除非你给它一个“动作”否则就一直显示在那。 今天我们就来看看这种Dia…

python面向对象(下)

python面向对象下封装封装的方法获取私有属性继承单一继承语法格式同名的情况私有属性的调用方法多重继承语法格式小例子同名的情况多态持续更新中~~~~~~~~~封装 封装是面向对象的核心思想。它是指将对象的属性和行为封装起来,其载体就是类,类通常对客户…

linux搭建git服务器,windows客户端配置git

Linux服务器配置之Git服务器搭建步骤: 一、配置环境 1、服务器:CentOS 8.2(64位) Git (version 2.27.0) 2、客户端:Windows 10 (64位) Git(version 2.38.…

基于深度学习的AI绘画为何突然一下子火了?

CLIP |Midjourney | dreamstudio AIGC | Stable Diffusion | Imagen 随着Disco、Midjourney、dreamstudio 、AIGC、Stable Diffusion、Imagen、深度学习、高性能计算、数据分析、数据挖掘等技术的快速发展,AI绘画技术得到迅速发展。 即使今年年初的AI绘…

Redis String类型使用方法

String 类型 String 类型,也就是字符串类型,是Redis中最简单的存储类型。 其value是字符串,不过根据字符串的格式不同,又可以分为3类: string:普通字符串int:整数类型,可以做自增、…

国际站、速卖通、Lazada店铺运营技巧?如何提升销量?

现在国际站、速卖通、Lazada平台开店的卖家越来越多,如何让店铺稳定的使用下去,是每一个卖家都需要思考的问题。现在我们一起来看一看,有哪些运营上需要注意的事项。 1选择产品 不管什么平台都是一样,产品是根本,只有…

Handler 原理

线程的应用场景 Android是单线程模型,Activity、Service、Broadcast等组件的创建,都是在主线程完成的,即UI线程。但如果需要执行一些耗时的操作时,比如:I/O的读写、大文件的读写、数据库操作以及网络上传和下载等操作都…

Linux登陆配置虚拟机

启用虚拟机一、启动虚拟机1、登录虚拟机2、查看IP地址3、能否PING通外网二、配置静态IP地址1、修改网卡配置文件2、重启网络服务3、重启虚拟机4、查看修改后的IP地址5、测试虚拟机能否Ping通外网三、测试宿主机与虚拟机能否相互Ping通1、测试宿主机能否Ping通虚拟机2、测试虚拟…