线性索引与行列号索引

一、含义

线性索引,顾名思义就是说把图像矩阵展平,相当于变成一维的图像数组,故像素点的线性索引就是其在图像数组中的索引值

行列号索引,对于一个二维的图像矩阵有行有列,知道行号和列号就可以唯一确定一个点的位置,类似于二维的坐标(横坐标,纵坐标)

下面举个例子来具体地阐述一下线性索引和行列号索引的含义:

例如,有一张大小为 100x100 的灰度图,那么可以用一个二维的图像矩阵来表示,也就是100行100列的矩阵,如下图所示:

综上所述就是关于线性索引和行列号索引的简要介绍,下面我们再来讨论一下线性索引和行列号索引之间如何相互转换?

二、线性索引转换为行列号索引

可以使用 Python 的整除 ( // )取余( % )运算

在进行转换的讲解之前,我们要先知道二维矩阵(此处以二维矩阵为例)是按照什么方式进行数据存储的,也就是说是行优先存储还是列优先存储。

1.行优先存储

含义:元素先存满第一行后再存储第二行,也就是第一行所有的元素都在第二行之前

假设有一个n行m列的矩阵以及一个线性索引index,可以用下面的代码转换线性索引为行列号索引:

rows = n  # 矩阵行数
cols = m  # 矩阵列数
index = index  # 线性索引#计算行列索引
row_index = index // cols  # 取商
col_index = index % cols   # 取余print("Row index:",row_index)
print("Column index:",col_index)

这段代码首先使用整除运算 // 计算行索引,然后使用取余运算 % 计算列索引

这是因为在行优先的二维矩阵中,每存储cols个元素,行数就增加1(注意:在Python中行号和列号都是从0开始的)

2.列优先存储

含义:元素先存满第一列后再存储第二列,也就是第一列所有的元素都在第二列之前

接着上面的例子来进行讲解,列优先存储就要先计算列号,然后通过余数计算行号

rows = n  # 矩阵行数
cols = m  # 矩阵列数
index = index  # 线性索引#计算行列索引
col_index = index // rows  # 取商
row_index = index % rows   # 取余print("Row index:",row_index)
print("Column index:",col_index)

这段代码首先使用整除运算 // 计算列索引,然后使用取余运算 % 计算行索引

这是因为在列优先的二维矩阵中,每存储rows个元素,列数就增加1(注意:在Python中行号和列 号都是从0开始的)

3. 行优先和列优先存储的差异

下面我们再来看看对于同一个点进行 行优先存储 和 列优先存储 的区别:

 

其中,region_edge_s.mat 是存储了如上图二值图像所示的连通域,属于每个连通域点的线性索引信息的Matlab文件,并且是以结构体形式存储的,如下图所示:

 

下面我们来将存储在文件中的线性索引转换为对应图像中的行列号索引,经过上图所示文件的读取操作后,field变量已经将连通域中点的线性索引进行了保存。

首先定义了一个函数 linear_index_to_2d_index ,此函数接受线性索引 linear_index 和 列数 num_cols 作为参数,计算行号和列号并进行返回

然后新建了一个大小为512x512的全零图像矩阵image(初始的图像为全黑),将得到的行号和列号所对应的位置处的像素值置为255(也就是以白色来显示)

最后使用matplotlib库来绘制图像image,代码以及运行结果如下图所示:

  • 按列优先存储:

  • 按行优先存储

综上所如图所示,可以很清楚地看到  按行存储 和 按列存储 之间的差异。

注意:   在这个例子中,可以看到  按列存储  图像可以得到和原始图像一样的结果,   这说明文件 region_edge_s.mat 中的线性索引是按列存储的。因为 Matlab是按照列优先的原则存储元素。所以在进行线性索引转换行列号索引的时候,一定要清楚该图像是按行存储的信息还是按列存储的。

 三、行列号索引转换为线性索引

将行列号索引转换为线性索引的方法取决于如何排列数据(按行存储的数据还是按列存储的数据)

下面举个 按行存储 的行列号转换为线性索引 的例子:

一般情况下,对于二维矩阵或数组,行列号索引可以转换为线性索引的公式如下:

假设有一个矩阵或数组,行数为 num_rows,列数为 num_cols,行索引为 row_index,列索引为 col_index,那么线性索引可以通过以下公式计算:

线性索引 = row_index * num_cols + col_index

这个公式基于矩阵在内存中的布局方式。行索引乘以列数得到的值代表了前面所有行占据的位置数量,再加上列索引得到具体位置的偏移量。

假设有一个3x3的矩阵,要将行列索引转换为线性索引:

num_rows = 3
num_cols = 3
row_index = 1
col_index = 2linear_index = row_index * num_cols + col_index
print("线性索引:", linear_index)
  • 在这个例子中,当 row_index 为 1,col_index 为 2 时,根据公式计算得到线性索引为 5

    同样,如果要从线性索引计算出行列索引,可以使用以下公式:

    row_index = linear_index // num_cols
    col_index = linear_index % num_cols

    这样就可以根据需要在行列索引和线性索引之间进行转换

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

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

相关文章

java基础之循环

Java中有三种主要的循环结构&#xff1a; while 循环do…while 循环for 循环 1、while循环 1.1、结构 while( 布尔表达式 ) { //循环内容 } 1.2、实例 public class TestWhile {public static void main(String[] args) {int x 1;while (x<10){System.out.println("…

阿里云通义千问720亿参数模型开源,适配企业级、科研级高性能应用

12月1日&#xff0c;阿里云举办通义千问发布会&#xff0c;开源通义千问720亿参数模型Qwen-72B。Qwen-72B在10个权威基准测评创下开源模型最优成绩&#xff0c;成为业界最强开源大模型&#xff0c;性能超越开源标杆Llama 2-70B和大部分商用闭源模型。未来&#xff0c;企业级、科…

Spring Cloud + Vue前后端分离-第2章 使用Maven搭建SpringCloud项目

Spring Cloud Vue前后端分离-第2章 使用Maven搭建SpringCloud项目 Maven两大核心功能&#xff1a; 依赖管理&#xff08;Jar包管理&#xff09; 构建项目&#xff08;项目打包&#xff09; 使用Eureka搭建注册中心 使用spring initializr创建spring cloud项目 SpringCloud…

FastAPI之声明请求参数示例数据

在Pydantic模型中添加额外的JSON模式数据 您可以声明Pydantic模型的示例&#xff0c;这些示例将被添加到生成的JSON模式中。 示例代码 from fastapi import FastAPI from pydantic import BaseModelapp FastAPI()class Item(BaseModel):name: strdescription: str | None …

(C语言实现)高精度除法 (洛谷 P2005 A/B Problem II)

前言 本期我们分享用C语言实现高精度除法&#xff0c;可通过该题测试点我点我&#xff0c;洛谷 p2005。 那么话不多说我们开始吧。 讲解 大家还记不记得小学的时候我们是怎么做除法的&#xff1f;我们以1115为例。 我们的高精度除法也将采用这个思路进行&#xff0c;分别用两…

Python-算术运算符详解

运算符 算术运算符 关系运算符 逻辑运算符 赋值运算符 算术运算符&#xff1a;加减乘除 %求余 **平方 // 先算乘方&#xff0c;再算乘除&#xff0c;最后是加减。括号可以改变优先级 0不能作为除数&#xff08;不论是整型0还是浮点0&#xff09; 除法截断&#xff1a;舍弃小…

UDP群聊

客户端 import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.EventQueue; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader…

使用VBA快速统计词组(单词组合)词频

实例需求&#xff1a;产品清单如A列所示&#xff0c;现在如下统计词组词频。想必各位小伙伴都指定如何使用字典对象实现去重&#xff0c;进而实现单个单词的词频统计。 但是统计词组词频就没有那么简单了&#xff0c;为了便于演示&#xff0c;此处的词组只限于两个单词的组合。…

【解决办法】Pycharm中新添加或者导入项目文件名红色!

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、问题描述二、问题原因三、解决办法 一、问题描述 Pycharm的代码中添加新的文件夹&#xff0c;发现文件夹下的文件名是红色的&#xff0c;如下图&#xff1a; …

设计模式——单例模式(Singleton Pattern)

概述 单例模式确保一个类只有一个实例&#xff0c;而且自行实例化并向整个系统提供整个实例&#xff0c;这个类称为单例类&#xff0c;它提供全局访问的方法。单例模式是一种对象创建型模式。单例模式有三个要点&#xff1a;一是某个类只能有一个实例&#xff1b;二是它必须自行…

Java---线程讲解(二)

文章目录 1. Runnable接口2. 卖票案例3. 同步代码块解决数据安全问题4. 同步方法解决数据安全问题5. 线程安全的类6. Lock锁 1. Runnable接口 1. 创建线程的另一种方法是声明一个实现Runnable接口的类&#xff0c;之后重写run()方法&#xff0c;然后可以分配类的实例&#xff0…

基于remix+metamask+ganache的智能合约部署调用

在我们部署合约时为了让它更接近真实区块链去中心化体验&#xff0c;我们需要调用小狐狸&#xff08;Metamask&#xff09;来进行真实交易&#xff0c;而metamask里没有内置虚拟测试币&#xff0c;我们需要进行调用Ganache来添加带有虚拟测试币的账号。以上就是三者的关系&…

从 MLOps 到 LMOps 的关键技术嬗变

本文整理自 2023 年 9 月 3 日 QCon 全球软件开发大会 2023 北京站 —— 从 MLOps 到 LMOps 分论坛的同名主题演讲。 本次分享的内容结构如下&#xff1a; 从 MLOps 到 LMOps&#xff1b; MLOps 概述、挑战与解决方案&#xff1b; LMOps 实施挑战与关键技术&#xff08;大模…

[FPGA 学习记录] 快速开发的法宝——IP核

快速开发的法宝——IP核 文章目录 1 IP 核是什么2 为什么要使用 IP 核3 IP 核的存在形式4 IP 核的缺点5 Quartus II 软件下 IP 核的调用6 Altera IP 核的分类 在本小节当中&#xff0c;我们来学习一下 IP 核的相关知识。 IP 核在 FPGA 开发当中应用十分广泛&#xff0c;它被称为…

使用Golang构建高性能网络爬虫

目录 一、Golang的特点 二、构建网络爬虫的步骤 三、关键技术和注意事项 使用协程进行并发处理 使用通道进行协程间的通信 合理控制并发数和处理速度 遵守网站使用协议和法律法规 防止被网站封禁或限制访问 优化网页解析和数据处理 异常处理和错误处理 日志记录和监控…

vmware虚拟机17 安装macos14过程及问题处理亲测

前期准备 1、可引导可虚拟机安装的macOS Sonoma 14 ISO镜像安装文件 我找到得地址&#xff0c;下载自行解决啦 2、VMware虚拟机应用软件 官网下载就好&#xff0c;搜个码搞定 3、解锁工具macOS Unlocker 开始安装&#xff1a; 1、打开VMware软件&#xff0c;新建一个系统…

Bert-vits2新版本V2.1英文模型本地训练以及中英文混合推理(mix)

中英文混合输出是文本转语音(TTS)项目中很常见的需求场景&#xff0c;尤其在技术文章或者技术视频领域里&#xff0c;其中文文本中一定会夹杂着海量的英文单词&#xff0c;我们当然不希望AI口播只会念中文&#xff0c;Bert-vits2老版本(2.0以下版本)并不支持英文训练和推理&…

完整方案开放下载!详解中国移动《通信网络中量子计算应用研究报告》

8月30日&#xff0c;中国移动在第四届科技周暨战略性新兴产业共创发展大会上重磅发布了《通信网络中量子计算应用研究报告》。 玻色量子作为中国移动在光量子计算领域的唯一一家合作企业兼战投企业&#xff0c;在量子计算应用于通信行业达成了深入合作&#xff0c;并在5G天线多…

干货分享|300平米A级机房设计方案

本方案中XXX计算机中心机房建设工程&#xff0c;是XXX的数据中心&#xff0c;机房位于建筑的X层&#xff0c;计算机机房面积300㎡。采购设备以及装修工艺主要用于XXX所属计算机机房装修工程。 考虑到中心机房投资大、使用周期长&#xff0c;而业主业务发展快&#xff0c;现代技…

空间地图GIS基础

关注微信公众号掌握更多技术动态 --------------------------------------------------------------- 一、GIS基本概念 地理信息系统&#xff08;Geographic Informaiton System, GIS&#xff09;是一个可以建立、浏览、查询、分析地理空间数据的软件系统&#xff0c;其功能小…