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

Numpy指南:解锁Python多维数组与矩阵运算(下)

文章一览

  • 前言
  • 一、排序
    • 1.1 numpy.sort
    • 1.2 numpy.argsort
    • 1.3 numpy.lexsort
  • 二、数组操作
    • 2.1 数组元素迭代
    • 2.2 数值舍入计算
    • 2.3数值取整
    • 2.4 数组去重
    • 2.5 数组拼接
    • 2.6 数组行列交换
  • 三、文件读写
    • 3.1 np.fromfile() 读文件
    • 3.2 np.loadtxt() 读文件
    • 3.3 用 csv 模块逐行处理 CSV 格式数据
    • 3.4 读取结果生成一个字典
    • 3.5 如何将 array 保存到 txt 文件中

前言

NumPy是Python中用于数值计算和科学计算的库。它提供了排序、数组操作和文件读写等功能。可以通过NumPy进行数组排序、形状改变、数组拼接和分割等操作。同时,还可以将数组保存为文本文件,并从文本文件中读取数据创建数组。NumPy是进行数据处理和分析的重要工具。

一、排序

numpy提供了大量用数组操作的函数,其中不乏常见的排序函数。

常见的有三种排序函数:

  • numpy.sort
  • numpy.argsort
  • numpy.lexsort

1.1 numpy.sort

使用 numpy.sort 函数可以对数组进行排序,并返回排序好的数组

使用方法: numpy.sort(a, axis = 1, kind = None, order = None)

参数:

  • a:要排序的数组
  • axis : 按什么轴进行排序,默认水平方向进行排序
  • kind :排序方法,默认是快速排序
  • order :当数组定义了字段属性时,可以按照某个属性进行排序
import numpy as np
x = np.array([[90,85,95,80],[80,95,90,85],[170,170,185,165]])
x1 = np.sort(x)
x2 = np.sort(x,axis = 0)

1.2 numpy.argsort

numpy.argsort 函数用于将数组排序后,返回数组元素从小到大依次排序的所有元素索引

使用方法: numpy.argsort(a, axis = 1, kind = None, order = None)

  • a:要排序的数组
  • axis:按什么轴进行排序,默认按水平方向进行排序
  • kind:排序方法,默认是快速排序
  • order:当数组定义了字段属性时,可以按照某个属性进行排序
import numpy as np
x = np.array([[5,8,3], [8,3,10]])
x1 = np.argsort(x,axis = 0)
x2 = np.argsort(x,axis = 1)

1.3 numpy.lexsort

numpy.lexsort 函数用于按照多个条件(键)进行排序,返回排序后索引

使用方法: numpy.lexsort(keys, axis = -1)

  • keys(k,N):(k,N) 数组或序列元组,要排序的 k 个不同的“列”。最后一列(如果键是二维数组,则为行)是主排序键
  • axis:沿指定轴进行排序
  • 返回指定轴对键进行排序的索引数组

numpy.lexsort 应用场景:高考录取学生按照总成绩排名录取。在总成绩相同时,数学成绩高的优先录取,在总成绩和数学成绩都相同时,按照语文成绩录取……

# 默认为从小到大排
>>> import numpy as np
>>> s = [590,585,570,585,570,570] # 总成绩
>>> m = [90,  85, 60, 68, 65, 70] # 数学成绩
# Sort by sum, then by math
>>> rank = np.lexsort((m,s))
[2 4 5 3 1 0]

二、数组操作

2.1 数组元素迭代

说到迭代,很容易想到直接对数组直接使用 for 循环操作,对于一维数组来说,当然是可以的

>>> import numpy as np
>>> x = np.array([1,2,3,4])
>>> for i in x:
>>>     print(i)
1
2
3
4
>>> import numpy as np
>>> x = np.array([[1,2,3],[4,5,6]])
>>> for i in x:
>>>     print(i)
[1 2 3]
[4 5 6]

有没有办法直接遍历二维数组里每一个元素?

>>> import numpy as np
>>> x = np.array([[1,2,3],[4,5,6]])
>>> for i in range(0,x.shape[0]):
>>>    for j in range(0,x.shape[1]):
>>>        print (x[i][j])
1
2
3
4
5
6

双层循环效率低。这个时候就需要用到 flat 方法,它可以将多维数组平铺为一维的迭代器

>>> import numpy as np
>>> x = np.array([[1,2,3],[4,5,6]])
>>> for i in x.flat:
>>>     print(i)
1
2
3
4
5
6

2.2 数值舍入计算

around 函数,用于四舍五入,返回一个新数组

>>> import numpy as np
>>> x = np.array([1.4523,2.7348,3.1652])
>>> x = np.around(x,2)
[1.45 2.73 3.17]

2.3数值取整

floor 函数向下取整,ceil 函数向上取整,返回一个新数组

>>> import numpy as np
>>> x = np.array([1.45,2.78,3.12])
>>> x1 = np.floor(x)
[1. 2. 3.]
>>> x2 = np.ceil(x)
[2. 3. 4.]

2.4 数组去重

>>> import numpy as np
>>> x = np.array([2,3,5,1,3,8,1,0])
>>> x1 = np.unique(x)
[ 1  2  3  4 10]

2.5 数组拼接

np.vstack:按垂直方向(行顺序)堆叠数组构成一个新的数组

np.hstack:按水平方向(列顺序)堆叠数组构成一个新的数组

注意:它只能给一个参数,所以要用括号括起来。

>>> import numpy as np
>>> a = np.array([2,5,7,8])
>>> b = np.array([1,3,9,10])
>>> c = np.vstack((a,b))
[[2 5 7 8][1 3 9 10]]
>>> import numpy as np
>>> a = np.array([2,5,7,8])
>>> b = np.array([1,3,9,10])
>>> c = np.hstack((a,b))
[2 5 7 8 1 3 9 10]

2.6 数组行列交换

数组水平或者垂直拼接很简单,但拼接之前应注意什么?

比如垂直拼接的时候,每一列代表的意义必须相同!如何交换某个数组的行或列呢?

>>> import numpy as np
>>> a = np.arange(1,13).reshape(3,4)
[[ 1  2  3  4][ 5  6  7  8][ 9 10 11 12]]
>>> a[[1,2],:] = a[[2,1],:]
[[ 1  2  3  4][ 9 10 11 12][ 5  6  7  8]]>>> import numpy as np
>>> a = np.arange(1,13).reshape(3,4)
[[ 1  2  3  4][ 5  6  7  8][ 9 10 11 12]]
>>> a[:,[0,2]] = a[:,[2,0]]
[[ 3  2  1  4][ 7  6  5  8][11 10  9 12]]

在多维数组索引中,逗号用于分隔不同维度的索引。逗号后面的 : 表示对列维度的全选,而前面的 [1,2] 指定了行索引。

a[[1,2],:] 则明确表示你想要的是第二行和第三行的所有列;

a[:,[0, 2]]当表示需要第0列和第2列时,逗号要放在前面

三、文件读写

3.1 np.fromfile() 读文件

numpy 可以方便的进行文件读写。使用 np.fromfile 函数从文本或二进制文件读入数据

numpy.fromfile (file, dtype = float, count = -1, sep ='', offset = 0)

  • file:要读取的文件名
  • dtype:返回数组的数据类型
  • count:要阅读的项目数。 -1 表示所有项目(即完整文件)
  • sep:表示使用空白字符来分隔数据
  • offset:与文件当前位置的偏移量,默认值为0。仅允许用于二进制文件
import numpy as np
d = np.fromfile('housing.data', sep = ' ')

空格或者回车都属于空白字符,读入的数据被转化成 1 维数组

如果想把一维数组转换成二维或多维,使用 reshape 即可

import numpy as np
d = np.fromfile('housing.data', sep = ' ')
d1 = d.reshape (-1,14)

3.2 np.loadtxt() 读文件

通常使用 numpy 中的 loadtxt()函数读取txt文件

  • fname:要读取的文件
  • comments:如果行的开头为#就会跳过该行
  • delimiter:分隔符
  • skiprows:跳过前几行读取,默认是0,必须是int整型
  • converters 字典类型,对某列数据类型进行转换
  • usecols:要读取哪些列(比如:usecols = (1,3),读取1和3列)(这里的列是从1开始编号
  • unpack:如果为True,将分列读取
  • ndmin:指定生成数组的维度
import numpy as np
a = np.loadtxt('test.txt')import numpy as np
a = np.loadtxt('test.txt',comments='#')import numpy as np
a = np.loadtxt('test.txt',usecols = [0,3])
print(a)

取出数据以后(再通过切片操作),就可以进行分析、统计、可视化等处理了

3.3 用 csv 模块逐行处理 CSV 格式数据

csv.reader(fname, delimiter = None) 返回一个 reader 对象,利用该对象可以遍历csv文件中的行,从 csv 文件中读取的每一行都以字符串列表的形式返回

import csv
with open ('student.csv','r') as f:csv_r = csv.reader(f)for row in csv_r:print(row)

3.4 读取结果生成一个字典

读取结果生成一个字典(dict),用 csv.DictReader(files)

import csv
with open('student2.csv') as csvfile: data = list(csv.DictReader(csvfile))
print ('记录个数:', len(data))
print ('记录:', data)
print ('列名:', list(data[0].keys()))

读取了数据,就可以进行数据处理了

3.5 如何将 array 保存到 txt 文件中

import numpy as np
arr = np.array([1,5,3,4,10,0,9])
np.savetxt('ar.txt', arr,fmt='%d',delimiter = '')
f = np.loadtxt ('ar.txt')
print(f)
  • array_text.txt:参数为文件路径以及 txt 文本名
  • arr:存入文件的数组名
  • fmt=‘%d’:为指定保存的文件格式,这里为十进制
  • delimiter= ’ ':表示分隔符,这里以空格的形式隔开

相关文章:

Numpy指南:解锁Python多维数组与矩阵运算(下)

文章一览 前言一、排序1.1 numpy.sort1.2 numpy.argsort1.3 numpy.lexsort 二、数组操作2.1 数组元素迭代2.2 数值舍入计算2.3数值取整2.4 数组去重2.5 数组拼接2.6 数组行列交换 三、文件读写3.1 np.fromfile() 读文件3.2 np.loadtxt() 读文件3.3 用 csv 模块逐行处理 CSV 格式…...

路由器刷机TP-Link tp-link-WDR5660 路由器升级宽带速度

何在路由器上设置代理服务器? 如何在路由器上设置代理服务器? 让所有连接到该路由器的设备都能够享受代理服务器的好处是一个不错的选择,特别是当需要访问特定的网站或加速网络连接的时候。下面是一些您可以跟随的步骤,使用路由器…...

VB.NET在 Excel 二次开发中的全面应用

摘要: 本文详细阐述了如何运用VB.NET进行 Excel 的二次开发。首先介绍了开发环境的搭建,包括安装 Visual Studio 及引用 Excel 对象库。接着深入探讨了各种基础操作,如创建 Excel 应用程序对象、打开与操作工作簿、处理工作表与单元格数据等。…...

uni-app使用组件button遇到的问题

在HBuilder X工具中新建一个空白项目, 1、新建一个about页 然后在pages.json文件里加上路由 2、然后看下导航的方法,发现找不到navigateTo方法 参考:button | uni-app官网 第3行和第4行的代码倒是没问题的,第5行的代码有问题执行…...

如何在Express.js中处理异常情况?

在 Express.js 中处理异常情况是确保应用程序稳定性和安全性的重要方面。未处理的错误可能会导致应用崩溃或暴露敏感信息给用户。以下是几种常见的处理异常的方法: 1. 使用 try...catch 和 async/await 对于异步操作,如数据库查询、文件系统访问等&…...

CKA认证 | Day7 K8s存储

第七章 Kubernetes存储 1、数据卷与数据持久卷 为什么需要数据卷? 容器中的文件在磁盘上是临时存放的,这给容器中运行比较重要的应用程序带来一些问题。 问题1:当容器升级或者崩溃时,kubelet会重建容器,容器内文件会…...

ArcGIS Pro地形图四至角图经纬度标注与格网标注

今天来看看ArcGIS Pro 如何在地形图上设置四至角点的经纬度。方里网标注。如下图的地形图左下角经纬度标注。 如下图方里网的标注 如下为本期要介绍的例图,如下: 图片可点击放大 接下来我们来介绍一下 推荐学习:GIS入门模型构建器Arcpy批量…...

策略模式以及优化

使用场景 在一个条件语句中又包含了多个条件语句 具体策略类会过多 把抽象策略和具体策略放在一个枚举类里。 方法 exe() 相当于抽象策略,而A和B就相当于实现了抽象策略的具体策略 这样就只需要一个枚举类就可以解决具体策略类过多的问题 public enum Strategy {A{O…...

linux自动化一键批量检查主机端口

1、准备 我们可以使用下面命令关闭一个端口 sudo iptables -A INPUT -p tcp --dport 端口号 -j DROP我关闭的是22端口,各位可以关其它的或者打开其它端口测试,谨慎关闭22端口!不然就会像我下面一样握手超时😭😭&…...

Vue3入门(9)

1. 【 replace属性】 作用:控制路由跳转时操作浏览器历史记录的模式。 浏览器的历史记录有两种写入方式:分别为push和replace: - push是追加历史记录(默认值)。 - replace是替换当前记录。 . 开启replace模式&#xff…...

《人工智能如何加速药物研发进程:从新药发现到临床试验的突破》

在当今医药领域,药物研发的复杂性和高成本使得新药的推出面临诸多挑战。而人工智能(AI)正以其强大的能力为药物研发带来新的契机,助力加速新药发现和临床试验过程。 新药发现阶段 靶点识别与筛选 药物研发的第一步是确定药物作…...

“鼎和财险一体化数据安全管控实践”入选信通院金融领域优秀案例

近日,由中国信通院举办的深度观察报告会系列论坛在京召开。在数字生态治理分论坛上,2024年度首期“磐安”优秀案例——六大行业应用优秀案例遴选结果发布,由北京原点数安科技有限公司与鼎和财产保险股份有限公司联合申报的“鼎和财险一体化数…...

探索多模态大语言模型(MLLMs)的推理能力

探索多模态大语言模型(MLLMs)的推理能力 Multimodal Large Language Models (MLLMs) flyfish 原文:Exploring the Reasoning Abilities of Multimodal Large Language Models (MLLMs): A Comprehensive Survey on Emerging Trends in Mult…...

72 mysql 的客户端和服务器交互 returnGeneratedKeys

前言 这里主要是针对如下 情况的讨论 比如我们 tz_zone 表有一个自增长的主键 id, 然后 客户端这边可以通过 PreparedStatement 相关的 api 来获取 服务端这边生成的自增长的 id 我们这里 来看一下 这个流程, 整体的 客户端 和 服务器的交互上面来看 问题来自于 主题&…...

【连续学习之SSL算法】2018年论文Selfless sequential learning

1 介绍 年份:2018 期刊: arXiv preprint Aljundi R, Rohrbach M, Tuytelaars T. Selfless sequential learning[J]. arXiv preprint arXiv:1806.05421, 2018. 本文提出了一种名为SLNID(Sparse coding through Local Neural Inhibition and…...

【蓝桥杯——物联网设计与开发】拓展模块5 - 光敏/热释电模块

目录 一、光敏/热释电模块 (1)资源介绍 🔅原理图 🔅AS312 🌙简介 🌙特性 🔅LDR (2)STM32CubeMX 软件配置 (3)代码编写 (4&#x…...

数字IC后端设计实现十大精华主题分享

今天小编给大家分享下吾爱IC社区星球上周十大后端精华主题。 Q1:星主,请教个问题,长tree的时候发现这个scan的tree 的skew差不多400p,我高亮了整个tree的schematic,我在想是不是我在这一系列mux前边打断,设置ignore p…...

高质量配音如何影响游戏的受欢迎度

在游戏行业中,创造沉浸式、引人入胜且令人难忘的体验往往决定了游戏的成功或失败。在影响游戏流行度的众多因素中,配音脱颖而出,成为将叙事与玩家互动连接起来的重要元素。高质量的配音将游戏中的对白转化为游戏的活跃部分,让玩家…...

QWidget应用封装为qt插件,供其他qt应用调用

在之前的文章中,有介绍通过QProcess的方式启动QWidget应用,然后将其窗口嵌入到其他的qt应用中,作为子窗口使用.这篇文章主要介绍qt插件的方式将QWidget应用的窗口封装为插件,然后作为其他Qt应用中的子窗口使用. 插件优点: 与主程序为同一个进程,免去了进程间繁琐的通信方式,…...

UE(虚幻)学习(四) 第一个C++类来控制小球移动来理解蓝图和脚本如何工作

UE5视频看了不少,但基本都是蓝图如何搞,或者改一下属性,理解UE系统现有组件使用的。一直对C脚本和蓝图之间的关系不是很理解,看到一个视频讲的很好,我也做笔记记录一下。 我的环境是UE5.3.2. 创建UE空项目 我们创建…...

docker详细操作--未完待续

docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...

基于FPGA的PID算法学习———实现PID比例控制算法

基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...

Spring Boot 实现流式响应(兼容 2.7.x)

在实际开发中,我们可能会遇到一些流式数据处理的场景,比如接收来自上游接口的 Server-Sent Events(SSE) 或 流式 JSON 内容,并将其原样中转给前端页面或客户端。这种情况下,传统的 RestTemplate 缓存机制会…...

循环冗余码校验CRC码 算法步骤+详细实例计算

通信过程:(白话解释) 我们将原始待发送的消息称为 M M M,依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)(意思就是 G ( x ) G(x) G(x) 是已知的)&#xff0…...

【位运算】消失的两个数字(hard)

消失的两个数字(hard) 题⽬描述:解法(位运算):Java 算法代码:更简便代码 题⽬链接:⾯试题 17.19. 消失的两个数字 题⽬描述: 给定⼀个数组,包含从 1 到 N 所有…...

视频字幕质量评估的大规模细粒度基准

大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...

文件上传漏洞防御全攻略

要全面防范文件上传漏洞,需构建多层防御体系,结合技术验证、存储隔离与权限控制: 🔒 一、基础防护层 前端校验(仅辅助) 通过JavaScript限制文件后缀名(白名单)和大小,提…...

ZYNQ学习记录FPGA(二)Verilog语言

一、Verilog简介 1.1 HDL(Hardware Description language) 在解释HDL之前,先来了解一下数字系统设计的流程:逻辑设计 -> 电路实现 -> 系统验证。 逻辑设计又称前端,在这个过程中就需要用到HDL,正文…...

【笔记】AI Agent 项目 SUNA 部署 之 Docker 构建记录

#工作记录 构建过程记录 Microsoft Windows [Version 10.0.27871.1000] (c) Microsoft Corporation. All rights reserved.(suna-py3.12) F:\PythonProjects\suna>python setup.py --admin███████╗██╗ ██╗███╗ ██╗ █████╗ ██╔════╝…...

AWSLambda之设置时区

目标 希望Lambda运行的时区是东八区。 解决 只需要设置lambda的环境变量TZ为东八区时区即可,即Asia/Shanghai。 参考 使用 Lambda 环境变量...