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

华为云AI开发平台ModelArts

华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...

XCTF-web-easyupload

试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...

Linux 文件类型,目录与路径,文件与目录管理

文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...

c++ 面试题(1)-----深度优先搜索(DFS)实现

操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

工程地质软件市场:发展现状、趋势与策略建议

一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...

大数据学习(132)-HIve数据分析

​​​​🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言&#x1f4…...

【JVM面试篇】高频八股汇总——类加载和类加载器

目录 1. 讲一下类加载过程? 2. Java创建对象的过程? 3. 对象的生命周期? 4. 类加载器有哪些? 5. 双亲委派模型的作用(好处)? 6. 讲一下类的加载和双亲委派原则? 7. 双亲委派模…...

虚拟电厂发展三大趋势:市场化、技术主导、车网互联

市场化:从政策驱动到多元盈利 政策全面赋能 2025年4月,国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》,首次明确虚拟电厂为“独立市场主体”,提出硬性目标:2027年全国调节能力≥2000万千瓦&#xff0…...

CSS | transition 和 transform的用处和区别

省流总结: transform用于变换/变形,transition是动画控制器 transform 用来对元素进行变形,常见的操作如下,它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...