在MATLAB中,矩阵可以表示为密集或稀疏格式。通常,矩阵默认以密集格式存储,这意味着每个元素都明确地存储在内存中,无论它的值是多少。然而,当矩阵含有大量的零元素时,这种存储方式就会变得非常低效。为了更有效地存储和操作这种矩阵,可以使用稀疏矩阵表示,其中只记录非零元素和它们的索引位置。
创建稀疏矩阵
在MATLAB中,可以使用sparse
函数创建稀疏矩阵。当你有一个大型矩阵,特别是当大部分元素为零时,使用稀疏矩阵表示可以显著减少内存使用,并提高数值计算的速度。
例如:
matlab
X = 1:100 > 80;
y = sparse(X);
这里,X = 1:100 > 80;
生成一个逻辑行向量,其中元素值为true
的地方对应于1:100
中大于80的元素位置。然后,sparse(X)
函数将这个向量转换成稀疏表示形式,仅存储非零元素。
转换回密集矩阵
可以使用full
函数将稀疏矩阵转换成密集矩阵:
matlab
k = full(y);
这里,full(y)
函数取稀疏矩阵y
作为输入,返回相应的密集矩阵k
。
MATLAB实现
演示代码
为了展示以上过程,我们可以运行以下MATLAB代码:
matlab
% 创建逻辑向量X,表示1到100中大于80的元素
X = 1:100 > 80;
% 将逻辑向量转换为稀疏矩阵y
y = sparse(X);
% 查看稀疏矩阵y
disp(y);
% 将稀疏矩阵y转换回密集矩阵k
k = full(y);
% 查看密集矩阵k
disp(k);
输出
执行上述代码,我们会得到以下输出:
稀疏表示输出:
密集输出
首先,打印稀疏矩阵y
,它仅存储了非零元素的位置和值。接着,打印密集矩阵k
,其中包含了相同的元素,但是以一个标准的密集数组形式。
在MATLAB环境中,可以看到y
和k
如何反映相同的数据,但以不同的方式存储。
请注意,稀疏矩阵在处理具有大量零值元素的大型矩阵时尤其有用,例如在有限元分析或大型图结构中。使用稀疏矩阵可以显著提高内存利用率和计算速度。
相关博文
我的图书
下面两本书欢迎大家参考学习。
OpenCV轻松入门
李立宗,OpenCV轻松入门,电子工业出版社,2023
本书基于面向 Python 的 OpenCV(OpenCV for Python),介绍了图像处理的方方面面。本书以 OpenCV 官方文档的知识脉络为主线,并对细节进行补充和说明。书中不仅介绍了 OpenCV 函数的使用方法,还介绍了函数实现的算法原理。
在介绍 OpenCV 函数的使用方法时,提供了大量的程序示例,并以循序渐进的方式展开。首先,直观地展示函数在易于观察的小数组上的使用方法、处理过程、运行结果,方便读者更深入地理解函数的原理、使用方法、运行机制、处理结果。在此基础上,进一步介绍如何更好地使用函数处理图像。在介绍具体的算法原理时,本书尽量使用通俗易懂的语言和贴近生活的实例来说明问题,避免使用过多复杂抽象的公式。
本书适合计算机视觉领域的初学者阅读,包括在校学生、教师、专业技术人员、图像处理爱好者。
本书第1版出版后,深受广大读者朋友的喜爱,被很多高校选为教材,目前已经累计重印9次。为了更好地方便大家学习,对本书进行了修订。
计算机视觉40例
李立宗,计算机视觉40例,电子工业出版社,2022
近年来,我深耕计算机视觉领域的课程研发工作,在该领域尤其是OpenCV-Python方面积累了一点儿经验。因此,我经常会收到该领域相关知识点的咨询,内容涵盖图像处理的基础知识、OpenCV工具的使用、深度学习的具体应用等多个方面。为了更好地把所积累的知识以图文的形式分享给大家,我将该领域内的知识点进行了系统的整理,编写了本书。希望本书的内容能够对大家在计算机视觉方向的学习有所帮助。
本书以OpenCV-Python(the Python API for OpenCV)为工具,以案例为载体,系统介绍了计算机视觉从入门到深度学习的相关知识点。
本书从计算机视觉基础、经典案例、机器学习、深度学习、人脸识别应用等五个方面对计算机视觉的相关知识点做了全面、系统、深入的介绍。书中共介绍了40余个经典的计算机视觉案例,其中既有字符识别、信息加密、指纹识别、车牌识别、次品检测等计算机视觉的经典案例,也包含图像分类、目标检测、语义分割、实例分割、风格迁移、姿势识别等基于深度学习的计算机视觉案例,还包括表情识别、驾驶员疲劳监测、易容术、识别年龄和性别等针对人脸的应用案例。
在介绍具体的算法原理时,本书尽量使用通俗易懂的语言和贴近生活的示例来说明问题,避免使用复杂抽象的公式来介绍。
本书适合计算机视觉领域的初学者阅读,适于在校学生、教师、专业技术人员、图像处理爱好者使用。