使用场景广泛存在于各种编程应用当中,比如图像处理中的像素点集合、科学计算里的数值

article/2025/6/18 10:06:18

数组的数据结构

数组是一种线性的数据结构,其中所有的元素都具有相同的数据类型并按照连续的方式存储在内存中。这种特性使得通过索引访问特定位置上的元素变得非常高效。

对于多维数组而言,其本质上是由多个一维数组嵌套而成。例如二维数组可以视为由若干个同长度的一维数组组成的一个整体。当涉及到更高维度时,则继续沿用这一模式构建更为复杂的空间布局。

int array[3][4]; // C++ 中声明了一个 3 行 4 列的整型二维数组

特点在于支持随机存取操作,并且由于地址计算简单而速度快;但是大小固定不变,在创建之后无法动态调整容量。

使用场景广泛存在于各种编程应用当中,比如图像处理中的像素点集合、科学计算里的数值模拟以及游戏开发里地图格子的设计等都需要依赖于高效的数组机制来进行快速定位与批量运算。


稀疏矩阵的数据结构

稀疏矩阵是指那些大部分元素都是零值的大规模矩形表格形式的数据集。为了节省空间资源并且提高效率,通常不会采用常规方法保存全部条目而是只记录非零项的位置及其对应的数值信息。

存在三种主要类型的压缩储存方案:

  • 三元组顺序表:利用三个字段分别代表行列坐标加上实际内容构成单个实体单元,再把这些有效成分按照行优先原则排列起来形成紧凑版列表;

  • 行逻辑链接的顺序表:除了上述基本信息外还额外增加了指向下一个同行内不为空白区域指针属性以便更方便地遍历查找目标对象;

  • 十字链表:不仅限于此处描述的内容,还包括横向纵向双向关联关系维护功能用于解决更加复杂的查询需求.

typedef struct {int i, j;double value;
} Element;// 假设这是基于C语言定义的一种简化版本的三元组表示法
Element sparse_matrix[] = {{0, 1, 5}, {1, 2, 8}};

适用于大规模数据分析领域内的特征提取任务或是机器学习算法训练过程中涉及高纬度输入样本预处理阶段等方面。


广义表的数据结构

广义表(Generalized List),也被称为列表结构或简称GL,是一类能够容纳不同类型成员甚至自身作为组成部分的高度抽象化的容器模型。它允许内部节点既可以是单一不可分割的基础变量也可以是一个新的子级序列实例从而实现了层次化组织形态下的灵活性扩展能力。

链式存储结构被用来表达广义表的具体实现方式之一,即每一个独立个体要么充当叶子节点携带具体数值要么成为分支连接点引导至更低层的对象群落直至末端终止为止。

(setq L '((A (B C)) D ((E F) G))) ; Lisp代码片段展示了如何建立一棵简单的广义表树状结构

常见应用场景包括但不限于编译原理课程里面语法分析器设计思路探讨、人工智能方向上知识表示框架搭建探索等领域之内。
### 关于数组、矩阵和广义表的数据结构

数组的概念与特性

数组是一种基本的数据结构,它由一组相同类型的元素组成。这些元素按照一定的顺序排列,并通过索引访问。一维数组可以看作是一个列表;而多维数组则可以通过多个维度来表示更复杂的关系。

对于二维数组(即矩阵),如果其行数等于列数,则该矩阵被称为方阵。在实际应用中,为了节省存储空间并提高效率,某些特定形式的矩阵可以采用压缩方式保存。例如:

  • 对角矩阵:当一个 (n \times n) 的矩阵满足条件 (a_{i,j} = 0) ((i \neq j))时,这样的矩阵被定义为对角矩阵。

  • 零矩阵:这是指所有元素均为零的一种特殊情况下的对角矩阵。

  • 稀疏矩阵:在一个大小为 (m \times n) 的矩阵里如果有 (t) 个非零项,并且比例 (\delta = t/(m*n)\leqslant 0.05) ,那么这个矩阵就被认为是稀疏矩阵。

压缩存储技术的应用

针对上述提到的一些特殊类型的矩阵,在计算机内部实现它们的时候往往会利用到所谓的“压缩存储”。这种做法主要是基于这样一个事实——许多情况下存在大量重复值甚至是完全空白的位置。因此,没有必要分别为每一个位置预留单独的空间资源。具体来说就是:

  • 对于那些具有固定模式或规律性的数值分布情况(比如对称矩阵、上/下三角形矩阵以及对角线附近的密集区),只需记录必要的信息即可完成整个对象的状态描述;

  • 零元素不再占用任何物理地址,而是通过间接手段推断出来;

  • 多重出现过的项目也仅需一次登记便可代表其余相似实例的存在状态。

# Python 实现简单的一维数组转置成二维对角矩阵的例子
def create_diagonal_matrix(vector):size = len(vector)matrix = [[0]*size for _ in range(size)]for i in range(size):matrix[i][i] = vector[i]return matrixvector_example = [1, 2, 3]
diagonal_matrix_result = create_diagonal_matrix(vector_example)for row in diagonal_matrix_result:print(row)
广义表简介及其特点

不同于传统意义上的向量或是表格类集合体,“广义表”指的是允许成员间相互嵌套形成树状层次关系的信息单元组合形态。它可以视为一种更为灵活自由版本的链式列表结构,其中不仅能够容纳单个独立实体作为节点组成部分,同时也支持子序列整体作为一个新个体加入进来构成更加复杂的逻辑关联网络。

如何检查矩阵是否为对角矩阵

为了验证一个给定的矩阵是否是对角矩阵,需要确认除了主对角线上的元素外,其他位置的所有元素都应为零。下面提供了一种通过编程方式来完成这一任务的方法。

Python代码实现
import numpy as npdef is_diagonal_matrix(matrix):"""判断传入的方阵matrix是否为对角矩阵.参数:matrix (list of list or ndarray): 输入待检测的n*n维方形矩阵返回:bool: 如果是则返回True;如果不是,则返回False。"""# 将列表转换成numpy数组以便于处理mat = np.array(matrix)# 获取矩阵尺寸n = len(mat)# 检查非对角线上是否有非零元素存在for i in range(n):for j in range(n):if i != j and abs(mat[i][j]) > 1e-8:  # 考虑浮点数误差return Falsereturn True# 测试案例
test_matrices = [[[1, 0, 0], [0, 2, 0], [0, 0, 3]],       # 对角矩阵实例[[1, 2, 0], [0, 2, 0], [0, 0, 3]]        # 非对角矩阵实例
]for m in test_matrices:result = "是" if is_diagonal_matrix(m) else "不是"print(f"{m} {result}对角矩阵")

上述Python函数is_diagonal_matrix()接收任意大小的正方形矩阵作为参数,并逐个比较其各个元素的位置关系。如果发现任何不在主对角线上的非零值,则立即断言该矩阵不满足对角矩阵条件并结束循环。

对于更复杂的场景或者大型数据集来说,还可以考虑利用NumPy库中的内置功能来进行更加高效的运算:

def check_with_numpy(matrix):"""使用Numpy快速判断"""mat = np.asarray(matrix)mask = ~np.eye(len(mat), dtype=bool)off_diag_elements = mat[mask]return all(abs(off_diag_elements) < 1e-8)print(check_with_numpy([[1, 0, 0], [0, 2, 0], [0, 0, 3]]))
print(check_with_numpy([[1, 2, 0], [0, 2, 0], [0, 0, 3]]))

这段基于NumPy版本的解决方案能够显著提高性能效率,在面对大规模数值计算时尤为适用。

如何创建指定维度的单位矩阵

在多种编程环境中可以方便地创建指定维度的单位矩阵。以下是几种常见方式。

使用 NumPy 库创建单位矩阵

NumPy 提供了一个简单的方法来生成单位矩阵,即 numpy.eye() 函数或 numpy.identity() 函数。这两个函数都可以用来创建方形单位矩阵(对角线上为1,其余位置为0)。对于任意正方形尺寸 N×N 的单位矩阵:

import numpy as np# 创建 3x3 单位矩阵
identity_matrix = np.eye(3)
print(identity_matrix)# 或者使用 identity 方法
identity_matrix_alt = np.identity(3)
print(identity_matrix_alt)

上述代码片段展示了两种不同的方法来构建相同的结果——一个 3 行 3 列的单位矩阵。

如果需要创建非标准形状(比如 M×N),则仅能通过 eye 来设置额外参数以控制列数:

non_square_identity = np.eye(N=4, M=5)  # 非平方的情况
print(non_square_identity)

此命令会生成一个具有 4 行和 5 列的矩形“单位”矩阵,在这种情况下,“单位”的概念只适用于最小边长上的元素。

MATLAB 中创建单位矩阵

MATLAB 同样提供了简便的方式用于创建单位矩阵,主要依赖于内置函数 eye。该函数接受整数值作为输入参数,表示所需单位矩阵的阶数;也可以传递两个参数分别代表行数与列数,从而得到不同规格的单位矩阵。

% 创建 3x3 单位矩阵
I = eye(3);% 对于非标准大小 (MxN),可如下操作
J = eye(4, 5);
disp(I); disp(J);

这段脚本先建立了一个典型的 3 × 3 单位矩阵 I ,接着又构造了一个拥有更多零填充项的 4 × 5 “广义”单位矩阵 J 。这体现了 MATLAB 处理各种规模数据集的强大灵活性。

在这里插入图片描述


http://www.hkcw.cn/article/xuRqVRdWtp.shtml

相关文章

计算机眼中的图像处理基础:灰度化与二值化实验详解

在计算机视觉和图像处理领域&#xff0c;理解计算机如何"看"图像是基础中的基础。本文将详细介绍图像处理中的两个核心概念&#xff1a;灰度化和二值化&#xff0c;并通过实验方法展示不同算法的效果差异。 一、计算机眼中的图像 1. 像素 像素(Pixel)是图像的基本…

OpenCV学习路线全解析!从入门图像处理到计算机视觉实战,搭建你的视觉AI技能体系

想进入计算机视觉领域&#xff0c;OpenCV 几乎是绕不开的第一站。它是一个开源的视觉工具库&#xff0c;拥有丰富的图像处理、识别、追踪等能力&#xff0c;被广泛用于教育、科研和工业场景。 但 OpenCV 功能强大&#xff0c;文档复杂&#xff0c;很多初学者“安装完不知道干啥…

图像处理——卷积

一、什么是卷积 卷积可以理解为两个函数f和g的重叠运算&#xff0c;通过将一个函数翻转并滑动到另一个函数上&#xff0c;计算它们在重叠点的乘积并求和&#xff0c;从而生成一个新的函数。数学上&#xff0c;卷积的表达式通常为&#xff1a; (f∗g)(t)∫−∞∞​f(τ)g(t−τ)…

【图像轮廓特征查找】图像处理(OpenCV) -part8

17 图像轮廓特征查找 图像轮廓特征查找其实就是他的外接轮廓。 应用&#xff1a; 图像分割 形状分析 物体检测与识别 根据轮廓点进行&#xff0c;所以要先找到轮廓。 先灰度化、二值化。目标物体白色&#xff0c;非目标物体黑色&#xff0c;选择合适的儿值化方式。 有了轮…

CImage类在VS2010中的应用与图像处理教程

本文还有配套的精品资源&#xff0c;点击获取 简介&#xff1a;本文旨在介绍如何在Visual Studio 2010中使用MFC库的CImage类进行图像处理。首先概述了CImage类的功能&#xff0c;然后详细讲解了加载、显示、保存图像以及进行裁剪、缩放、旋转等操作的方法。提供了示例代码&a…

【机器学习】图像处理与深度学习利器:OpenCV实战攻略全面解析

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 前言 OpenCV想必大家都听过跨平台计算机视觉库&#xff0c;可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而…

机器学习中的图像处理与计算机视觉

引言 在现代计算机科学中&#xff0c;图像处理和计算机视觉已成为最活跃的研究领域之一&#xff0c;这得益于机器学习和深度学习的发展。本文将深入探讨图像处理与计算机视觉的基础概念、常见应用、关键技术、常用工具&#xff0c;以及在这些领域中的代码示例。通过本篇文章&a…

Fiji —— 基于 imageJ 的免费且开源的图像处理软件

文章目录 一、Fiji —— 基于 imageJ 的免费且开源的图像处理软件1.1、Fiji工具安装&#xff08;免费&#xff09;1.2、Fiji源码下载1.2、Fiji - Plugins插件安装 二、功能详解2.0、Fiji - ImageJ&#xff08;Web应用程序&#xff09;2.1、常用功能&#xff08;汇总&#xff09…

深入了解 OpenCV:C# 开发者的图像处理利器

OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一个开源的计算机视觉与图像处理库&#xff0c;自 2000 年由 Intel 开发以来&#xff0c;已经发展成为业界领先的图像处理框架之一。凭借其跨平台特性、丰富的功能集以及活跃的社区支持&#xff0c;OpenCV…

巴黎世家平角短裤造型裙子已缺货 时尚争议再起

近日,奢侈品牌巴黎世家推出的一款售价4500元的女款半身裙在网上引发热议。不少网友吐槽该裙子造型与平角短裤极为相似,直呼“看不懂时尚”。据巴黎世家官网介绍,这款深蓝色弹力平纹针织半身裙亮相于2025秋季系列Look 50和Look 54。裙子采用弹力棉混纺平纹针织面料,设计为平…

日本男子杀害妻子幼女后自杀 家庭悲剧震惊邻里

6月2日上午,日本大阪府吹田市发生一起悲剧。一名26岁男子从世博会馆附近的一座天桥上跳下自杀。警方随后在其家中发现了他妻子和两名幼女的尸体,三人腹部血流不止,已经死亡。现场还发现了一把带血的菜刀和一张字条,字条上写着对女儿和妻子的歉意。据警方透露,当天早上6点2…

女婴术后脑损伤疑撞到床栏 家属求真相艰难

近日,四川的徐女士反映,她五个多月大的孩子鱼鱼在四川大学华西第二医院锦江院区做完心脏手术后,头部出现了一个创口。经检查,鱼鱼被诊断为脑出血和脑损伤,并伴有癫痫。当地卫健委介入调查后未能得出明确结论。5月29日,记者在事发医院见到已经一岁多的鱼鱼,她仍旧不会爬行…

A股六月开门红 三大指数集体反弹

端午节三天小长假后,六月首个交易日A股三大指数集体反弹,给股民朋友们带来了一个“开门红”。这是继五月“开门红”之后,A股再度取得月度良好开局。截至收盘,沪指涨0.43%,深成指涨0.16%,创业板指涨0.48%,北证50指数涨1.03%。全市场成交额达到11638亿元,较上日放量4亿元…

端午节假期国内出游1.19亿人次 文旅融合添彩传统节日

文化和旅游部6月3日公布了2025年端午节假期文化和旅游市场的情况。经测算,假期三天内,全国国内出游人数达到1.19亿人次,同比增长5.7%;国内出游总花费为427.30亿元,同比增长5.9%。在假期期间,群众积极参与赛龙舟、吃粽子、唱山歌和赏古曲等活动,传统节日文化内涵与旅游发…

乌克兰袭击克里米亚大桥 画面曝光 大桥严重受损

据乌克兰独立新闻社等媒体6月3日报道,乌克兰方面对克里米亚大桥发动了袭击。乌克兰国家安全局表示,克里米亚大桥在这次袭击中严重受损。截至报道时,俄罗斯官方尚未对此消息作出公开回应。责任编辑:0764

媒体评游客因小孩进入拍摄画面打架 迪士尼冲突引热议

5月31日,有网友发布视频称,在上海迪士尼疯狂动物城园区内,一对情侣和一家三口发生肢体冲突。视频中显示,双方在现场扭打,周围游客纷纷上前劝阻。6月1日晚,上海市公安局浦东分局通报了此事。据通报,5月31日18时许,浦东公安分局接到报警,称迪士尼乐园内有人打架。经初步…

广州即将进入“蒸烤”模式 高温晴热天气来袭

广东省气象部门预计,端午假期最后一天起的新一轮“龙舟水”强降水过程将在4日开始减弱。在本轮“龙舟水”减弱前,广东各地仍需防御风雨影响;即使在“龙舟水”减弱后,仍需警惕地质灾害发生。此外,在“龙舟水”间歇期,广东各地还需留意高温天气。根据广东省气象部门的观测和…

南海部分海域有火箭残骸坠落 航行警告发布

据中国海事局消息,清澜海事局发布航行警告,6月4日0时至6月6日24时,南海部分海域将有火箭残骸掉落,禁止驶入。责任编辑:0764

当年他步行3公里送歼-10原型机首飞 见证中国航空辉煌

我国自主研发的出口型战斗机歼-10CE在国际地区冲突中表现出色,引起了国际军贸市场的广泛关注。这款由成都所设计、成飞制造的单发单座多用途战斗机具备体系协同作战能力,在强电磁对抗环境下可进行超视距多目标攻击及多模式对地精确打击。在机库中,记者见到了参与歼-10飞机研…

郑钦文不敌萨巴伦卡止步法网8强 期待不断突破

6月3日17时,2025法网女单1/4决赛中,郑钦文以0-2不敌赛会头号种子萨巴伦卡。首盘比赛中,双方各破对方一个发球局,最终在抢七中,郑钦文以6-7(3)失利。这场比赛是郑钦文与萨巴伦卡的第8次交手。此前的6次对决中,郑钦文均未能取胜,因此萨巴伦卡被视为她职业生涯中的一座“…