NumPy学习Day18

1.数据迭代

1.1 nditer

使用np.nditer(x,order=)遍历数组x中的元素

  • x为需要遍历的数组
  • order='c’时按照行优先遍历
  • order='f’时按照列优先遍历

1.2 flags参数

flags可以返回数组中元素的多维索引(类似矩阵的坐标)

  • multi_index: 返回每个元素的多维索引。
  • external_loop: 返回一维数组而不是单个元素,减少函数调用的次数,从而提高性能。
import numpy as np
def arr_nditer():arr = np.array([[1,2,3,4],[5,6,7,8]])print(arr)#order='c'表示按行遍历数组for x in np.nditer(arr,order='c'):print(x,end=' ')print(end='\n')#order='f'表示按列遍历数组for y in np.nditer(arr,order='f'):print(y,end=' ')print()#不写order表示默认按行遍历for z in np.nditer(arr):print(z)print()#flags可以返回数组元素的多维索引(相当于矩阵中的坐标点)#flags的参数是一个数组it = np.nditer(arr,flags=['multi_index'])for x in it:print(f'x:{x},multi_index:{it.multi_index}')#external_loop:遍历数组,返回一个一维的遍历结果数组for x in np.nditer(arr,flags=['external_loop'],order='f'):print(f'x:{x}')# 类似python列表遍历,如果是多维数组,将行作为整体for x in arr:print(x)# arr_nditer()

1.3 op_flags 参数

op_flags 参数用于指定操作数的行为。

  • readonly: 只读操作数。
  • readwrite: 读写操作数。
  • writeonly: 只写操作数。

2.数组操作

2.1 数组变维

函数名称函数介绍
reshape在不改变数组元素的条件下,修改数组的形状
flat返回是一个迭代器,可以用 for 循环遍历其中的每一个元素
flatten以一维数组的形式返回一份数组的副本,对副本的操作不会影响到原数组
ravel返回一个连续的扁平数组(即展开的一维数组),与 flatten不同,它返回的是数组视图(修改视图会影响原数组)
import numpy as np
def arr_flat():arr = np.arange(1,11).reshape(2,5)print(f'初始数组为:{arr}')# flat返回一维数组迭代器,按行遍历for x in arr.flat:print(x,end=' ')print()# flatten返回一个新的一维数组,不影响原数组的形状# 可以通过order设置按行或按列返回一维数组arr1 = arr.flatten(order='f')print(arr1)arr2 = arr.ravel()print(arr2)# 当修改由flatten返回的一维数组的元素时,不影响原数组中的元素# 当修改由ravel返回的一维数组的元素时,原数组的元素也会被影响# ravel方法返回的是元素组的视图arr1[-1] = 20print(arr,'----')arr2[-1] = 20print(arr,'!!!!!')# arr_flat()

2.2 数组转置

函数名称说明
transpose将数组的维度值进行对换,比如二维数组维度(2,4)使用该方法后为(4,2)
ndarray.T与 transpose 方法相同
#arr.T:数组转置
#np.transpose(arr):转置数组
def arr_transpose():arr = np.arange(1,7).reshape(2,3)arr1 = arr.Tprint(arr,'~~~~')print(arr1,'!!!!')print('-----')arr2 = np.transpose(arr)print(arr2)# arr_transpose()

2.3 修改数组维度

多维数组(也称为 ndarray)的维度(或轴)是从外向内编号的。这意味着最外层的维度是轴0,然后是轴1,依此类推。

函数名称参数说明
expand_dims(arr, axis)arr:输入数组
axis:新轴插入的位置
在指定位置插入新的轴(相对于结果数组而言),从而扩展数组的维度
squeeze(arr, axis)arr:输入数的组
axis:取值为整数或整数元组,用于指定需要删除的维度所在轴,指定的维度值必须为 1 ,否则将会报错,若为 None,则删除数组维度中所有为 1 的项
删除数组中维度为 1 的项
# np.expands_dims(arr,axis):按照指定的axis轴拓展数组的维度
# np.squeeze(arr,axis):按照指定的axis轴降低数组的维。前提:数组的最外层为1,否则报异常
def arr_dims():arr = np.arange(1,7)arr1 = np.expand_dims(arr,axis=0)print(arr1)arr2 = np.expand_dims(arr,1)print(arr2)arr3 = np.arange(1,7).reshape(2,3)arr4 =np.expand_dims(arr3,0)print(arr4)arr5 = np.expand_dims(arr3,1)print(arr5)arr6 = np.arange(1,7).reshape(1,6)print(arr6)arr7 = np.squeeze(arr6,0)print(arr7)# arr8 = np.squeeze(arr3,0)# print(arr8)
# arr_dims()

2.4 连接数组

函数名称参数说明
hstack(tup)tup:可以是元组,列表,或者numpy数组,返回结果为numpy的数组按水平顺序堆叠序列中数组(列方向)
vstack(tup)tup:可以是元组,列表,或者numpy数组,返回结果为numpy的数组按垂直方向堆叠序列中数组(行方向)

hstack函数要求堆叠的数组在垂直方向(行)上具有相同的形状。如果行数不一致,hstack() 将无法执行,并会抛出 ValueError 异常。

vstack() 要求堆叠的数组在垂直方向(行)上具有相同的形状。如果列数不一致,将无法执行堆叠操作。

vstack() 和 hstack() 要求堆叠的数组在某些维度上具有相同的形状。如果维度不一致,将无法执行堆叠操作。

#np.hstack(arr1,arr2):两个数组按列拼接,前提:行数一致
#np.vstack(arr1,arr2):两个数组按行拼接,前提:列数一致
def arr_concat():arr1 = np.arange(1,7).reshape(2,3)arr2 = np.arange(7,15).reshape(2,4)arr3 = np.hstack((arr1,arr2))print(arr3)arr4 = np.arange(7,13).reshape(2,3)arr5 = np.vstack((arr1,arr4))print(arr5)# arr_concat()

2.5 分割数组

函数名称参数说明
hsplit(ary, indices_or_sections)ary:原数组
indices_or_sections:按列分割的索引位置
将一个数组水平分割为多个子数组(按列)
vsplit(ary, indices_or_sections)ary:原数组
indices_or_sections:按列分割的索引位置
将一个数组垂直分割为多个子数组(按行)
#np.hsplit(arr,indices):按照列切割,不包含指定列值
#np.vsplit(arr,indices):按照行切割,不包含指定行值
def arr_split():arr = np.arange(1,13).reshape(3,4)print(arr)result = np.hsplit(arr,[1,3])print(result)print(result[0])print(result[1])print(result[2])result1 = np.vsplit(arr,[1])print(result1)print(result1[0])print(result1[1])# arr_split()

3.数组元素的增删改查

3.1 resize

np.resize(arr,new_shape(m,n)):改变数组的形状,如果原数组中的元素数量不够,则将原数组开始位置的元素依次添加到指定形状的数组中

3.2 append

np.append(arr,values,axis):将values追加到arr数组中

  • 如果没有指定axis则将values追加到arr后面,然后返回一个一维数组
  • 如果axis=0则按行追加到arr数组后
  • 如果axis=1则按列追加到arr数组后

3.3 insert

np.insert(arr,indices,values,axis):在原数组指定的索引前(不包含索引值)插入values

  • 如果不指定axis,则添加值之后不返回一维数组
  • 如果axis=0,则按行添加
  • 如果axis=1,则按列添加

3.4 delete

np.delete(arr,indices,axis):

  • 根据指定的indices索引值删除元素
  • 不指定axis,则返回一维数组
  • axis=0,按行删除
  • axis=1,按列删除

3.5 argwhere

np.argwhere(arr):返回数组中所有非0元素的下标

3.6 unique

np.unique:对数组元素去重

  • return_index=Ture:表示新数组元素在原数组中的索引位置
  • return_inverse=Ture:表示原数组元素在新数组中的索引位置
  • return_count=Ture:表示新数组中的元素在原数组中出现的次数

如果对多维数组进行去重,则先将多维数组转换为一维数组,然后去重,最后返回一个去重后的一维数组

#np.resize(arr,new_shape(m,n)):改变数组的形状,如果原数组中的元素数量不够,则将原数组开始位置的元素依次添加到指定形状的数组中
def arr_resize():arr = np.array([1,2,3,4,5])arr1 = np.resize(arr,(3,3))print(arr1)# arr_resize()#np.append(arr,values,axis):将values追加到arr数组中
#如果没有指定axis则将values追加到arr后面,然后返回一个一维数组
#如果axis=0则按行追加到arr数组后
#如果axis=1则按列追加到arr数组后
def arr_append():arr = np.arange(6).reshape(2,3)print(arr)arr1 = np.append(arr,[[0,0,0],[1,1,1]],None)print(arr1)arr2 = np.append(arr,[[0,0,0],[1,1,1]],0)print(arr2)arr3 = np.append(arr, [[0, 0, 0], [1, 1, 1]], 1)print(arr3)
# arr_append()#np.insert(arr,indices,values,axis):在原数组指定的索引前(不包含索引值)插入values
#如果不指定axis,则添加值之后不返回一维数组
#如果axis=0,则按行添加
#如果axis=1,则按列添加
def arr_insert():arr = np.arange(6).reshape(2,3)arr1 = np.insert(arr,1,[99])print(arr1)arr2 = np.insert(arr,1,[99],0)print(arr2)arr3 = np.insert(arr,1,[99],1)print(arr3)arr4 = np.insert(arr,-1,[99],1)print(arr4)
# arr_insert()#np.delete(arr,indices,axis):
#根据指定的indices索引值删除元素
#不指定axis,则返回一维数组
#axis=0,按行删除
#axis=1,按列删除
def arr_delete():#一维数组删除:直接根据索引删除对应位置元素arr = np.array([1,2,3,4,5,6])arr1 = np.delete(arr,(2,4))print(arr1)arr2 = np.arange(1,7).reshape(2,3)arr3 = np.delete(arr2,1,0)print(arr3)arr4 = np.delete(arr2,1,1)print(arr4)# arr_delete()#np.argwhere(arr):返回数组中所有非0元素的下标
def arr_argwhere():arr = np.arange(6).reshape(2,3)arr1 = np.argwhere(arr)print(arr1)# arr_argwhere()#np.unique:对数组元素去重
#return_index=Ture:表示新数组元素在原数组中的索引位置
#return_inverse=Ture:表示原数组元素在新数组中的索引位置
#return_count=Ture:表示新数组中的元素在原数组中出现的次数
def arr_unique():arr = np.array([1,2,2,3,3,3,4,4,4,4,5,5,5,5,5])arr1,indices1 = np.unique(arr,return_index=True)print(arr1)print(indices1)arr2,indices2 = np.unique(arr,return_inverse=True)print(arr2)print(indices2)arr3,indices3 =np.unique(arr,return_counts=True)print(arr3)print(indices3)#如果对多维数组进行去重,则先将多维数组转换为一维数组,然后去重,最后返回一个去重后的一维数组arr4 = np.array([[1,2],[2,3],[3,4]])arr5,indices5 = np.unique(arr4,return_index=True)print(arr5,'----')print(indices5,'---')
# arr_unique()

4. 统计函数

4.1 amin/amax

amin:求数组中最小值,axis=0时找每列中的最小值,axis=1时找每行中的最小值

amax:求数组中最大值,axis=0时找每列中的最大值,axis=1时找每行中的最大值

4.2 ptp

ptp:求数组中最大值和最小值的差,axis=0,求每列中最大值和最小值的差,axis=1,求每行中最大值和最小值的差

4.3 median

np.median(arr,axis):求中位数,即按照数值从大到小排列后中间的元素值,如果元素个数为偶数则中位数为中间两个元素值的平均值,如果元素个数为奇数则为元素本身

  • axis=0,找每列的中位数
  • axis=1,找每行的中位数
  • axis=None,将数组转为一维数组找中位数

4.4 mean

np.mean(arr,axis):求数组中的算术平均值

  • axis=None时将多维数组转为一维数组求算术平均值
  • axis=0时求每列的平均值
  • axis=1时求每行的平均值

4.5 average

np.average(arr,weights):求数组的加权平均值

  • 加权平均值:数组中所有元素与对应的权重的积之和

4.6 var/std

np.var(arr,ddof):求方差

  • 如果不指定ddof=1,则求整体方差
  • 如果ddof=1,则求样本方差
  • 默认不指定ddof,默认求总体方差

np.std():求标准差,即方差开更号

import numpy as np#amin:求数组中最小值,axis=0时找每列中的最小值,axis=1时找每行中的最小值
#amax:求数组中最大值,axis=0时找每列中的最大值,axis=1时找每行中的最大值
#ptp:求数组中最大值和最小值的差,axis=0,求每列中最大值和最小值的差,axis=1,求每行中最大值和最小值的差
def arr_min():arr = np.array([[1,22,2],[3,233,4],[5,6,7]])arr1 = np.amin(arr,0)print(arr1)arr2 = np.amin(arr,1)print(arr2)arr3 = np.amax(arr,0)print(arr3)arr4 = np.amax(arr,1)print(arr4)arr5 = np.ptp(arr,0)print(arr5)arr6 = np.ptp(arr,1)print(arr6)
# arr_min()#np.median(arr,axis):求中位数,即按照数值从大到小排列后中间的元素值,如果元素个数为偶数则中位数为中间两个元素值的平均值,如果元素个数为奇数则为元素本身
#axis=0,找每列的中位数
#axis=1,找每行的中位数
#axis=None,将数组转为一维数组找中位数
def arr_median():arr = np.array([[1,3,5],[2,4,6]])arr1 = np.median(arr)print(arr1)arr2 = np.median(arr,0)print(arr2)arr3 = np.median(arr,1)print(arr3)# arr_median()#np.mean(arr,axis):求数组中的算术平均值
#axis=None时将多维数组转为一维数组求算术平均值
#axis=0时求每列的平均值
#axis=1时求每行的平均值
def arr_mean():arr = np.array([[1,2,3],[77,88,99]])arr1 = np.mean(arr)print(arr1)arr2 = np.mean(arr,0)print(arr2)arr3 = np.mean(arr,1)print(arr3)# arr_mean()#np.average(arr,weights):求数组的加权平均值
#加权平均值:数组中所有元素与对应的权重的积之和
def arr_average():arr = np.array([1,2,3,4,5,6])weights = np.array([0.1,0.2,0.2,0.3,0.1,0.1])arr1 = np.average(arr,weights=weights)print(arr1)# arr_average()#np.var(arr,ddof):求方差
#如果不指定ddof=1,则求整体方差
#如果ddof=1,则求样本方差
#默认不指定ddof,默认求总体方差#np.std():求标准差,即方差开更号
def arr_var():arr = np.array([1,2,3,4,5])arr1 = np.var(arr)print(arr1)arr2 = np.var(arr,ddof=1)print(arr2)arr3 = np.std(arr)print(arr3)arr4 = np.std(arr,ddof=1)print(arr4)arr_var()

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

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

相关文章

工具类的构造方法为什么要用private修饰

工具类(Utility Class)通常被设计为包含静态方法和静态变量的类,可以使用类名.方法名直接调用,不用进行实例化,这是工具类的设计原则,所以构造方法用private修饰(因为公开的方法可以被实例化&am…

基于neo4j的糖尿病知识图谱数据

基于Neo4j的糖尿病知识图谱项目:毕业设计必备💡 这个项目,专为需要深入挖掘医学或AI数据的朋友们量身定制,尤其适合用于毕业设计!如果你对图谱构建、AI问答系统、或者正在学习Neo4j,那么你不得不看看这个技…

管家婆财贸ERP BB014.销售按库存选存货

最低适用版本: 财贸系列 22.8 插件简要功能说明: 销售按库存选存货插件,多元化价格跟踪体系用户根据存货+仓库自设仓库协议价仓库协议价支持手工或通过售价生成便捷录入销售单开单,无需选择客户,支持按存货查询库存余额及仓库协议价,选中存货即可将存货默认出库单位一级…

大厂物联网(IoT)高频面试题及参考答案

目录 解释物联网 (IoT) 的基本概念 物联网的主要组成部分有哪些? 描述物联网的基本架构。 IoT 与传统网络有什么区别? 物联网中常用的传感器类型有哪些? 描述物联网的三个主要层次。 简述物联网中数据安全的重要性 描述物联网安全的主要威胁 解释端到端加密在 IoT 中…

linux—基础命令及相关知识

1.0Linux的哲学思想(优势) 1、一切都是一个文件,一切硬件设备包括硬件接口都可以以文件形式显示 2、系统小型,轻量级,300个包(不装桌面的情况下) 3、避免令人困惑的用户界面(图形…

在 Spring 中使用 @EhCache 注解作为缓存

文章目录 项目概况项目设置一个简单的 RESTful Web 服务Spring 整合 EhCache第 1 步:更新依赖项以使用 EhCache Spring 注解第 2 步:设置自定义缓存管理器第 3 步:配置 EhCache第 4 步:测试缓存 刷新缓存总结推荐阅读文章 EhCache…

第十六届蓝桥杯嵌入式真题

蓝桥杯嵌入式第十二届省赛真题二 蓝桥杯嵌入式第十三届省赛真题一 蓝桥杯嵌入式第十三届省赛真题二 蓝桥杯嵌入式第十四届省赛真题 蓝桥杯嵌入式第十四届模拟考试一 蓝桥杯嵌入式第十四届模拟考试二 蓝桥杯嵌入式第十五届模拟考试一 蓝桥杯嵌入式第十五届模拟考试二 蓝…

Linux系统基础-进程间通信(3)_模拟实现匿名管道

个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 Linux系统基础-进程间通信(3)_模拟实现匿名和命名管道 收录于专栏[Linux学习] 本专栏旨在分享学习Linux的一点学习笔记,欢迎大家在评论区交流讨论&a…

docker入门(三)自定义部署docker镜像

docker系列d​​​​​​​docker入门(一)安装及镜像命令_docker国内源-CSDN博客文章浏览阅读1.5k次,点赞44次,收藏12次。注意:是强依赖Linux环境,即便在windows上部署Docker其本质也都是先安装一个虚拟机&…

SpringBoot3.x和OCR构建车牌识别系统

本专题旨在展示 OCR 技术与 SpringBoot3.x 框架结合的广泛应用。我们会深入探讨它在医疗、金融、教育、交通、零售、公安等多个领域的现实应用。每个应用场景都会提供详细的实例、面临问题的分析与解决策略,以帮助您深入理解 OCR 技术在实践中的关键作用。让我们一同…

糖果——差分约束 + 正环判定及其优化(手搓栈 + 标记法)

题目 思考 这里转为判定负环可以是可以&#xff0c;但是不能用超级源点了&#xff08;改为把节点全部压入&#xff09;&#xff0c;因为按照题目条件&#xff0c;建立的应该是各个节点指向超级源点的有向边&#xff0c;这显然破坏了超级源点的功能 代码 #include <bits/st…

【数据结构与算法】Java中的基本数据结构:数组、链表、树、图、散列表等。

探索Java集合框架&#xff1a;数据结构的精髓与应用 摘要&#xff1a; 在本文中&#xff0c;我们将深入探讨Java集合框架中的核心数据结构&#xff0c;包括数组、链表、树、图、散列表、栈、队列、集合、映射和优先队列。通过分析每种数据结构的实现原理和特点&#xff0c;你将…

ArcGIS002:软件自定义设置

摘要&#xff1a;本文详细介绍安装arcgis10.2后软件自定义设置内容&#xff0c;包括工具条的启用、扩展模块的启用、如何加载项管理器、快捷键设置、样式管理器的使用以及软件常规设置。 一、工具条的启用 依次点击菜单栏【自定义】->【工具条】&#xff0c;根据工作需求勾…

某ai gpt的bug

某ai gpt的bug 背景 遇到了一个奇怪的现象&#xff1a; 输入内容 2024-10-21 10:09:31,052 ERROR o.a.j.t.JMeterThread: Test failed! java.lang.IllegalArgumentException:输出结果

使用 PyTorch 构建 LSTM 股票价格预测模型

目录 引言准备工作1. 训练模型&#xff08;train.py&#xff09;2. 模型定义&#xff08;model.py&#xff09;3. 测试模型和可视化&#xff08;test.py&#xff09;使用说明模型调整结论 引言 在金融领域&#xff0c;股票价格预测是一个重要且具有挑战性的任务。随着深度学习…

即时通讯增加Redis渠道

情况说明 在本地和服务器分别启动im服务&#xff0c;当本地发送消息时&#xff0c;会发现服务器上并没有收到消息 初版im只支持单机版&#xff0c;不支持分布式的情况。此次针对该情况对项目进行优化,文档中贴出的代码非完整代码&#xff0c;可自行查看参考资料[2] 代码结构调…

电机PWM控制中的定时器配置与信号极性对电机转向的影响分析

文章目录 摘要关键词1. 引言2. PWM控制与定时器配置3. 实验与问题描述3.1 定时器配置代码分析3.2 问题分析 4. 解决方案5. 实验结果6. 结论 电机PWM控制中的定时器配置与信号极性对电机转向的影响分析 摘要 PWM&#xff08;脉宽调制&#xff09;信号是控制电机速度与方向的常…

Docker安装ocserv教程(效果极佳)

本章教程,介绍如何在Debain系统上安装ocserv。安装方式是使用Docker方式部署。 一、安装Docker curl -sSL https://file.ewbang.com/docker/debian/install_docker.sh -o install_docker.sh && bash install_docker.sh二、拉取镜像 docker pull tommylau/ocserv

数据库-01MYSQL-002MySQL5.7错误连接未释放导致数据库连接失败

**报错信息&#xff1a;** 信息&#xff1a; 11276:无法创建数据库<NAMSE_89>的连接:jdbc:mysql://xx.xx.xx.xx:3306/v_report xxxx_user 23246:无法创建数据库<NAMSE_89>的连接:jdbc:mysql://xx.xx.xx.xx:3306/v_report xnzb_user null, message from server: &qu…

工作窃取(Work-Stealing)是什么?

工作窃取&#xff08;Work-Stealing&#xff09;是什么&#xff1f; 工作窃取是一种并行任务调度算法&#xff0c;用于最大化 CPU 资源利用率&#xff0c;特别适合任务分解递归式的并发场景。其核心思想是&#xff1a;当某个线程完成了自己分配的任务后&#xff0c;如果其他线…