当前位置: 首页 > 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空项目 我们创建…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合

强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...

Debian系统简介

目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版&#xff…...

React Native在HarmonyOS 5.0阅读类应用开发中的实践

一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...

spring:实例工厂方法获取bean

spring处理使用静态工厂方法获取bean实例,也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下: 定义实例工厂类(Java代码),定义实例工厂(xml),定义调用实例工厂&#xff…...

C# SqlSugar:依赖注入与仓储模式实践

C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...

让AI看见世界:MCP协议与服务器的工作原理

让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...

全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比

目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中,新增了一个本地验证码接口 /code,使用函数式路由(RouterFunction)和 Hutool 的 Circle…...

PAN/FPN

import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...