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= ’ ':表示分隔符,这里以空格的形式隔开

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

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

相关文章

运行StableDiffusionInpaintPipeline的Example时报错:OSError: Cannot load model runwayml/stable-diffusion-...

项目地址: https://huggingface.co/docs/diffusers/api/pipelines/stable_diffusion/inpainthttps://huggingface.co/docs/diffusers/api/pipelines/stable_diffusion/inpaint在云服务器端运行下面给出的Example的时候出现报错: (myconda) rootwnyrpE:…

JDK高频面试题(包重点)

一、什么是JDK JDK(Java Development Kit)即 Java 开发工具包,是 Java 编程的基础与核心,由 Sun Microsystems(现归属于 Oracle 公司 )开发,主要作用如下: 1、提供编译环境 它包含了…

pikachu靶场搭建详细步骤

一、靶场下载 点我去下载 二、靶场安装 需要的环境: mysqlApaches(直接使用小皮面板Phpstudy:https://www.xp.cn/),启动他们 设置网站,把靶场的路径对应过来 对应数据库的信息 由于没有核对数据库的信…

第P4周:猴痘病识别

目录 前言一、我的环境二、代码实现1. 前期准备1.1 设置GPU1.2 导入数据1.3 划分数据集 2. 构建简单的CNN网络3. 训练模型3.1 设置超参数3.2 编写训练函数3.3 编写测试函数3.4 正式训练 4. 结果可视化4.1 Loss与Accuracy图4.2 指定图片进行预测 5. 保存并加载模型 三、学习体会…

ElasticSearch - 深入解析 Elasticsearch Composite Aggregation 的分页与去重机制

文章目录 Pre概述什么是 composite aggregation?基本结构after 参数的作用问题背景:传统分页的重复问题after 的设计理念响应示例 after 如何确保数据不重复核心机制Example步骤 1: 创建测试数据创建索引插入测试数据 步骤 2: 查询第一页结果查询第一页返…

如何用WPS AI提高工作效率

对于每位职场人而言,与Word、Excel和PPT打交道几乎成为日常工作中不可或缺的一部分。在办公软件的选择上,国外以Office为代表,而在国内,WPS则是不可忽视的一大选择。当年一代天才程序员求伯君创造了WPS,后面雷军把它装…

深度学习中的并行策略概述:1 单GPU优化

深度学习中的并行策略概述:1 单GPU优化 1 Training Larger Models on a Single GPU 在讨论模型的“扩展”时,往往会想到在多个GPU或多台机器上进行模型训练。不过,即便是在单个GPU上,也存在多种方法来训练更大规模的模型并提升…

Go+chromedp实现Web UI自动化测试

1.为什么使用go进行UI自动化测试? 速度:Go速度很快,这在运行包含数百个UI测试的测试套件时是一个巨大的优势 并发性:可以利用Go的内置并发性(goroutines)来并行化测试执行 简单:Go的简约语法允许您编写可读且可维护…

2、C#基于.net framework的应用开发实战编程 - 设计(二、三) - 编程手把手系列文章...

二、设计; 二.三、构建数据库; 此例子使用的是SQLite数据库,所以数据库工具用的SQLiteStudio x64,这个是SQLite专用的数据库设计管理工具,其它的数据库管理工具比如DBeaver的使用请见实战工具系列文章。 1、…

2011-2020年各省城镇职工基本医疗保险年末参保人数数据

2011-2020年各省城镇职工基本医疗保险年末参保人数数据 1、时间:2011-2020年 2、来源:国家统计局 3、指标:省份、时间、城镇职工基本医疗保险年末参保人数 4、范围:31省 5、指标解释:参保人数指报告期末按国家有关…

Github优质项目推荐(第九期)

文章目录 Github优质项目推荐(第九期)一、【tldraw】,37.1k stars - 在 React 中创建无限画布体验的库二、【zapret】,9.1k stars - 独立(无需第三方服务器)DPI 规避工具三、【uBlock】,48.3k s…

Web安全攻防入门教程——hvv行动详解

Web安全攻防入门教程 Web安全攻防是指在Web应用程序的开发、部署和运行过程中,保护Web应用免受攻击和恶意行为的技术与策略。这个领域不仅涉及防御措施的实现,还包括通过渗透测试、漏洞挖掘和模拟攻击来识别潜在的安全问题。 本教程将带你入门Web安全攻防…

KOI技术-事件驱动编程(前端)

1 “你日渐平庸,甘于平庸,将继续平庸。”——《以自己喜欢的方式过一生》 2. “总是有人要赢的,那为什么不能是我呢?”——科比布莱恩特 3. “你那么憎恨那些人,和他们斗了那么久,最终却要变得和他们一样,…

嵌入式Linux QT+OpenCV基于人脸识别的考勤系统 项目

此项目是基于人脸识别的考勤系统开发,包括如下模块: 1、人脸识别考勤系统GUI界面设计,包括: (1)Qt环境(window环境/linux环境) ; (2)Qt工程创建分析; &am…

UGUI简单动画制作

一、最终效果 UI简单动画制作 二、制作过程 1、打开动画制作窗口 2、新建一个动画 3、给一个对象制作动画 4、创建动画控制器进行不同动画变换控制 5、书写脚本,通过按钮来进行不同动画切换 using System.Collections; using System.Collections.Generic; using U…

Windows Powershell实战指南(未完成)

目前只作简单了解,开始吧。 一、初识Powershell 目标 初步认识 Powershell和其集成环境 Ise,学会基本设置 实验 我们从简单的例子开始:希望你能从控制台和ISE的配置中实现相同的结果。然后按照下面五步进行。 (1)选…

PyQt实战——实现可视化音频播放器(十三)

系类往期文章: PyQt5实战——多脚本集合包,前言与环境配置(一) PyQt5实战——多脚本集合包,UI以及工程布局(二) PyQt5实战——多脚本集合包,程序入口QMainWindow(三&…

Java日志框架:log4j、log4j2、logback

文章目录 配置文件相关1. properties测试 2. XMl使用Dom4j解析XML Log4j与Log4j2日志门面 一、Log4j1.1 Logges1.2 Appenders1.3 Layouts1.4 使用1.5 配置文件详解1.5.1 配置根目录1.5.2 配置日志信息输出目的地Appender1.5.3 输出格式设置 二、Log4j22.1 XML配置文件解析2.2 使…

RustDesk内置ID服务器,Key教程

RustDesk内置ID服务器,Key教程 首先需要准备一个域名,并将其指定到你的 rustdesk 服务器 ip 地址上,这里编译采用的是Github Actions ,说白了是就workflows,可以创建一些自动化的工作流程,例如代码的检查&a…

OpenHarmony怎么修改DPI密度值?RK3566鸿蒙开发板演示

本文介绍在开源鸿蒙OpenHarmony系统下,修改DPI密度值的方法,触觉智能Purple Pi OH鸿蒙开发板演示,搭载了瑞芯微RK3566四核处理器,Laval鸿蒙社区推荐开发板,已适配全新开源鸿蒙OpenHarmony5.0 Release系统,适…