python—NumPy的基础(2)

news2024/11/14 20:41:03

文章目录

    • 一维数组索引和切片
      • 一维数组索引和切片的使用
      • 一维数组负索引和切片的使用
    • 二维数组的索引和切片
      • 索引直接获取
      • 使用坐标获取数组[x,y]
      • 二维数组负索引的使用
      • 切片数组的复制
    • 改变数组的维度
      • 改变数组的维度
    • 数组的拼接
      • 列表的拼接
      • 一维数组的拼接
      • 二维数组的拼接
      • vstack 与hstack的使用
      • 三维数组的拼接
      • 数组的转置
      • transpose进行转换
    • 数组的分隔
      • split分隔
      • 水平分隔
      • 垂直分隔
    • 数学函数
      • 求每个元素的倒数
      • reciprocal()函数的使用
      • square()函数的使用
      • sign()函数的使用
      • modf()函数的使用
      • 三角函数的使用
      • around、floor、ceil函数的使用

NumPy(Numerical Python)是Python的一种开源的数值计算扩展库,它为Python提供了高效的多维数组对象和用于处理这些数组的函数。NumPy广泛应用于科学计算、数据分析、机器学习、图像处理、信号处理等领域。以下是对NumPy的详细介绍:

一维数组索引和切片

在这里插入图片描述
ndarray对象的内容可以通过索引或切片来访问和修改,与 Python中 list 的切片操作一样。
ndarray 数组可以基于 0 - n 的下标进行索引,并设置 start, stop及 step 参数进行,从原数组中切割出一个新数组。

一维数组索引和切片的使用

x=np.arange(10)
x[2]
x[2:7:2]
x[2:]

一维数组负索引和切片的使用

x=np.arange(10)
x[-2]
x[-2:]

二维数组的索引和切片

在这里插入图片描述

索引直接获取

x=np.arange(1,13)
a=x.reshape(4,3)
print('数组元素')
print(a)
print('获取第二行')
print(a[1])
print('获取第三行第二列')
print(a[2][1])

使用坐标获取数组[x,y]

x=np.arange(1,13)
a=x.reshape(4,3)
print('数组元素')
print(a)
#使用索引获取
print('所有行的第二列')
print(a[:,1])
print('获取第三行第二列')
print(a[2,1])
print('奇数行的第一列')
print(a[::2,0])
print('同时获取第三行第二列,第四行第一列')
print(a[(2,3),(1,0)])

二维数组负索引的使用

print('获取最后一行')
print(a[-1])
print('行进行倒序')
print(a[::-1])
print('行列都倒序')
print(a[::-1,::-1])

切片数组的复制

a=np.arange(1,13).reshape(3,4)
sub_array=a[:2,:2]
sub_array[0][0]=1000
sub_array=np.copy(a[:2,:2])
sub_array[0][0]=2000

改变数组的维度

通过reshape方法可以将一维数组变成二维、三维或者多维数组,也可以通过reshape方法将多维数组变成一维。

改变数组的维度

import numpy as np
#创建一维的数组
a=np.arange(24)
#使用reshape将一维数组变成三维数组
b=a.reshape(2,3,4)
#将a变成二维数组
c=a.reshape(3,8)
#将多维数组变成一维数组
a.reshape(-1)

通过ravel方法或flatten方法可以将多维数组变成一维数组。改变数组的维度还可以直接设置Numpy数组的shape属性(元组类型),通过resize方法也可以改变数组的维度。

#使用ravel函数将三维的b变成一维的数组
a1=b.ravel()
#使用flatten函数将二维的c变成一维的数组
a2=c.flatten() 
#使用shape属性将三维的b变成二维数组(6行4列)
b.shape=(6,4)
#使用resize修改数组的维度
b.resize((2,12))

数组的拼接

在这里插入图片描述

函数描述
concatenate连接沿现有轴的数组序列
hstack水平堆叠序列中的数组(列方向)
vstack竖直堆叠序列中的数组(行方向)

concatenate 函数用于沿指定轴连接相同形状的两个或多个数组,格式如下:

numpy.concatenate((a1, a2, ...), axis)`在这里插入代码片`
  • a1, a2, …:相同类型的数组
  • axis:沿着它连接数组的轴,默认为 0

列表的拼接

a=[1,2,3]
b=[4,5,6]
a.extend(b)

一维数组的拼接

import numpy as np
x=np.arange(1,4)
y=np.arange(4,7)
print(np.concatenate([x,y]))

二维数组的拼接

a=np.array([[1,2,3],[4,5,6]])
b=np.array([['a','b','c'],['d','e','f']])
print(np.concatenate([a,b]))
print('x轴方向及垂直堆叠')
print(np.concatenate([a,b],axis=0))
print('y轴方向及水平堆叠')
print(np.concatenate([a,b],axis=1))

vstack 与hstack的使用

numpy.hstack它通过水平堆叠来生成数组。
numpy.vstack 它通过垂直堆叠来生成数组。

print(np.vstack([a,b]))
print(np.hstack([a,b]))

三维数组的拼接

aa=np.arange(1,37).reshape(3,4,3)
bb=np.arange(101,137).reshape(3,4,3)
print('axis=0'*10)
print(np.concatenate((aa,bb),axis=0))#6 4 3
print('axis=1'*10)
print(np.concatenate((aa,bb),axis=1))#3,8,3
print('axis=2'*10)
print(np.concatenate((aa,bb),axis=2))#3,4,6

axis=0可以使用vstack替换
axis=1可以使用hstack替换
axis=2可以使用dstack替换

数组的转置

在这里插入图片描述
将行与列对调,即第一行变成第一列…或第一列变成第一行…的操作即使转置操作。

transpose进行转换

#transpose进行转置
#二维转置
a=np.arange(1,13).reshape(2,6)
print('原数组a')
print(a)
print('转置后的数组')
print(a.transpose())
print(a.T)
#多维数组转置
aaa=np.arange(1,37).reshape(1,3,3,4)
#将1,3,3,4转换为3,3,4,1
print(np.transpose(aaa,[1,2,3,0]).shape)

数组的分隔

在这里插入图片描述
numpy.split 函数沿特定的轴将数组分割为子数组,格式如下:

numpy.split(ary, indices_or_sections, axis)
  • ary:被分割的数组
  • indices_or_sections:如果是一个整数,就用该数平均切分,如果是一个数组,为沿轴切分的位置 (左开右闭)
  • axis:沿着哪个维度进行切向,默认为0,横向切分。为1时,纵向切分

split分隔

import numpy as np
x=np.arange(1,9)
a=np.split(x,4)
print(a)
print(a[0])
print(a[1])
print(a[2])
print(a[3])
#传递数组进行分隔
b=np.split(x,[3,5])
print(b)

水平分隔

使用hsplit函数可以水平分隔数组,该函数有两个参数,第1个参数表示待分隔的数组,第2个参数表示要将数组水平分隔成几个小数组。

#水平分割
x=np.arange(16).reshape(4,4)
m,n=np.hsplit(x,2)
print(x)
print(m)
print(n)

垂直分隔

使用vsplit函数可以垂直分隔数组,该函数有两个参数,第1个参数表示待分隔的数组,第2个参数表示将数组垂直分隔成几个小数组。

#垂直分隔
x=np.arange(16).reshape(4,4)
m,n=np.vsplit(x,[2])
print(m)
print(n)
print('三部分'*10)
m,n,z=np.vsplit(x,[1,3])
print(m)
print(n)
print(z)

数学函数

Numpy支持向量处理ndarray对象,提高程序运算速度。

方法说明
np.abs()、np.fabs()计算整数、浮点数的绝对值
np.sqrt()计算各元素的平方根
np.reciprocal()计算各元素的倒数
np.square()计算各元素的平方
np.exp()计算各元素的指数ex
np.log() np.log10() np.log2()计算各元素的自然对数、底数为10的对数、底数为2的对数
np.sign()计算各元素的符号,1(整数)、0(零)、-1(负数)
np.ceil() np.floor() np.rint()对各元素分别向上取整、向下取整、四舍五入
np.modf()将各元素的小数部分和整数部分以两个独立的数组返回
np.cos() 、np.sin()、np.tan()对各元素求对应的三角函数
np.add()、np.subtract()、np.multiply()、np.divide()对两个数组的各元素执行加法、减法、乘法、除法

求每个元素的倒数

a=[3,4,5,6,7,8]
b=np.array(a)
result=[]
for i in a:
    result.append(1/i)
print('result1:',result)
print('result2:',[1/i for i in a])
#直接对列表求导数不可以,但ndarray类型可以直接求导数
# print('result3:',1/a)
print('result4:',1/b)

numpy.reciprocal() 函数返回参数逐元素的倒数。如 1/4 倒数为4/1。

reciprocal()函数的使用

a=np.arange(1,10,dtype=np.float).reshape(3,3)
print(np.reciprocal(a))

square()函数的使用

#一维数组
a = np.arange(1,10)
np.square(a)
#传统方式
np.array([i*i for i in a])
#二维数组
aa = np.arange(1,13).reshape(3,4)
np.square(aa)
#传统方式
bb = np.ones_like(aa)
for x in range(3):
    for y in range(4):
        bb[x,y] = aa[x,y]*aa[x,y]

sign()函数的使用

#sign的使用
#计算各元素的符号,1(整数)、0(零)、-1(负数)
a=np.arange(-5,5)
np.sign(a)

modf()函数的使用

#modf的使用
b = np.arange(-5,5,0.4)
#将各元素的小数部分和整数部分以两个独立的数组返回
np.modf(b)

三角函数的使用

x=np.linspace(1,10,10)
y=np.sin(x)
print(y)

around、floor、ceil函数的使用

#around、floor、ceil函数的使用
#numpy.around(a,decimals)
#decimals: 舍入的小数位数。 默认值为0。 如果为负,整数将四舍五入到小数点左侧的位置
#numpy.floor() 返回数字的下舍整数。
#numpy.rint() 四舍五入
#numpy.ceil() 返回数字的上入整数。
a=np.array([1.0,4.55,123,0.567,25.532])
print(np.around(a))
print(np.around(a,decimals=1))
print(np.around(a,decimals=-1))
print(np.floor(a))
print(np.rint(a))
print(np.ceil(a))

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

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

相关文章

el-image预览图片点击遮盖处关闭预览

预览关闭按钮不明显 解决方式: 1.修改按钮样式明显点: //el-image 添加自定义类名,下文【test-image】代指 .test-image .el-icon-circle-close{ color:#fff; font-size:20px; ...改成很明显的样式 }2.使用事件监听,监听当前遮…

第十一章 数据结构

第十一章 数据结构 11.1 数组 数组是元素的顺序集合,通常这些元素具有相同的数据类型 索引表示元素在数组中的顺序号,顺序号从数组开始处计数 数组元素通过索引被独立给出了地址,数组整体上有一个名称,但每个元素利用数组的的…

TCP网络socket编程(面向连接)

Tcp面向链接、面向字节流和文件的读写非常类似():客户端创建套接字主动建立连接,服务器监听套接字一直等待连接的到来,监听到一个,就创建一个新的套接字用于IO 服务器: 创建套接字&#xff1a…

区块链和数据要素融合的价值及应用

一、数据要素面临的关键障碍 在构建数据要素基石的过程中,首要任务是明确并解决产权架构的难题,特别是使用权的确立与流转机制的顺畅,此乃数字经济蓬勃发展的命脉所在。一个高效的数据流转体系对于激发数据潜能、加速经济发展及优化数据资源…

TreeSelect增加可筛选功能

TreeSelect官方可筛选示例 <template><el-tree-selectv-model"value":data"data"filterablestyle"width: 240px"/><el-divider /><el-divider />filter node method:<el-tree-selectv-model"value":data&q…

使用torch_pruning对YOLOv8进行剪枝(新版、detect、segment)

torch_pruning库介绍 在结构修剪中&#xff0c;**Group被定义为深度网络中最小的可移除单元。**每个组由多个相互依赖的层组成&#xff0c;需要同时修剪这些层以保持最终结构的完整性。然而&#xff0c;深度网络通常表现出层与层之间错综复杂的依赖关系&#xff0c;这对结构修剪…

[大牛直播SDK]Windows平台RTMP直播推送模块功能设计

技术优势 全自研框架&#xff0c;易于扩展&#xff0c;自适应算法让延迟更低、采集编码传输效率更高&#xff1b;所有功能以SDK接口形式提供&#xff0c;所有状态&#xff0c;均有event回调&#xff0c;完美支持断网自动重连&#xff1b;SDK模块化&#xff0c;可和大牛直播播放…

DBeaver Ultimate 22.1.0 连接数据库(MySQL+Mongo+Clickhouse)

前言 继续书接上文 Docker Compose V2 安装常用数据库MySQL+Mongo,部署安装好之后我本来是找了一个web端的在线连接数据库的工具,但是使用过程中并不丝滑,最终还是选择了使用 DBeaver ,然后发现 mongo 还需要许可,又折腾整理了半下午,终于大功告成。 DBeaver 版本及说明…

SpringBoot集成Sharding-JDBC实现分库分表

本文已收录于专栏 《中间件合集》 目录 版本介绍背景介绍拆分方式集成并测试1.引入依赖2.创建库和表3.pom文件配置3.编写测试类Entity层Mapper接口MapperXML文件测试类 4.运行结果 自定义分片规则定义分片类编写pom文件 总结提升 版本介绍 SpringBoot的版本是&#xff1a; 2.3.…

SpringBoot上传超大文件导致Cannot read more than 2,147,483,647 into a byte array,问题解决办法

问题描述 报错: java.lang.IllegalArgumentException: Cannot read more than 2,147,483,647 into a byte array at org.apache.commons.io.IOUtils.lambda$toByteArray$0(IOUtils.java:2403) ~[commons-io-2.11.0.jar:2.11.0] at org.apache.commons.io.output.Thre…

python每日学习12:pandas库的用法(1)

python每日学习12&#xff1a;pandas库的用法&#xff08;1&#xff09; 安装 pip install pandas设定系统环境 import pandas as pd #设定自由列表输出最多为 10 行 pd.options.display.max_rows 10 # 显示当前 Pandas 版本号 pd.__version__进入jupyter notebook 页面 在终端…

氧气传感器在汽车制氧检测中的应用

在当今汽车工业中&#xff0c;技术的快速发展不仅带来了驾驶安全性和舒适性的显著提升&#xff0c;还为车辆增加了各种智能功能&#xff0c;以应对不同的驾驶环境和需求。氧气传感器作为一种关键的技术装置&#xff0c;在汽车制氧检测系统中的应用&#xff0c;尤其是针对疲劳驾…

困于数字化泥潭的软件公司|专题报告集

数字化专题报告集链接&#xff1a;https://tecdat.cn/?p36964 在探讨企业数字化转型的进程中&#xff0c;软件公司无疑扮演着举足轻重的角色。它们不仅是技术创新的驱动力&#xff0c;更是连接管理与技术的桥梁。然而&#xff0c;正如许多观察家所指出的那样&#xff0c;软件…

每天五分钟计算机视觉:目标检测模型从RCNN到Fast R-CNN的进化

本文重点 前面的课程中,我们学习了RCNN算法,但是RCNN算法有些慢,然后又有了基于RCNN的Fast-RCNN,Fast R-CNN是一种深度学习模型,主要用于目标检测任务,尤其在图像中物体的识别和定位方面表现出色。它是R-CNN系列算法的一个重要改进版本,旨在解决R-CNN中计算量大、速度慢…

jackson序列化(jackson codec)

Jackson 是一个用于 Java 平台的开源 JSON 库&#xff0c;它提供了灵活且高效的方式来处理 JSON 数据的序列化(Java对象 → JSON字符串)和反序列化(JSON 字符串→ Java对象)。 以下是 Jackson 的一些主要特点和功能&#xff1a; 高性能&#xff1a;Jackson 通过使用基于流的处理…

Ubuntu安装QQ教程

Ubuntu安装QQ教程 腾讯更新Linux版的QQ&#xff0c;这里安装一下&#xff1b; 首先&#xff0c;进入官网找到合适对应的安装包&#xff1b; QQLinux版本官网&#xff1a;https://im.qq.com/linuxqq/index.shtml 我们是ubuntu系统选择X86下的deb版本&#xff0c;如果是arm开…

TikTok养号的网络环境及相关代理IP知识

TikTok作为一个流行的短视频分享平台&#xff0c;其用户量非常庞大&#xff0c;很多商家和个人都会使用TikTok来进行引流和推广。由于TikTok的规则和政策限制了每个用户每天发布视频的数量&#xff0c;因此许多用户会使用多个账号来发布更多的视频以提高曝光率。 然而&#xff…

Android Studio Build窗口出现中文乱码问题

刚安装成功的android studio软件打开工程&#xff0c;编译时下方build窗口中中文是乱码。 解决&#xff1a; 可点击studio状态栏的Help—>Edit Custom VM Options &#xff0c;在打开的studio64.exe.vmoptions文件后面添加&#xff1a;(要注意不能有空格&#xff0c;否则st…

FL Studio Producer Edition 21.2.3.4004中文直版及FL Studio 204如何激活详细教程

在数字化音乐制作的浪潮中&#xff0c;FL Studio 24.1.1.4234的发布无疑又掀起了一股新的热潮。这款由Image-Line公司开发的数字音频工作站&#xff08;DAW&#xff09;软件&#xff0c;以其强大的功能和易用的界面&#xff0c;赢得了全球无数音乐制作人的青睐。本文将深入探讨…

python 图片转文字、语音转文字、文字转语音保存音频并朗读

一、python图片转文字 1、引言 pytesseract是基于Python的OCR工具&#xff0c; 底层使用的是Google的Tesseract-OCR 引擎&#xff0c;支持识别图片中的文字&#xff0c;支持jpeg, png, gif, bmp, tiff等图片格式 2、环境配置 python3.6PIL库安装Google Tesseract OCR 3、安…