matlab——sparse函数和full函数(稀疏矩阵和非稀疏矩阵转换)

2024-05-30 03:32

本文主要是介绍matlab——sparse函数和full函数(稀疏矩阵和非稀疏矩阵转换),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

函数功能:生成稀疏矩阵 

使用方法 :
S = sparse(A) 
将矩阵A转化为稀疏矩阵形式,即矩阵A中任何0元素被去除,非零元素及其下标组成矩阵S。
如果A本身是稀疏的,sparse(S)返回S。 
S = sparse(i,j,s,m,n,nzmax) 
由向量i,j,s生成一个m*n的含有nzmax个非零元素的稀疏矩阵S,并且有 S(i(k),j(k)) = s(k)。
向量 i,j 和 s 有相同的长度。对应对向量i和j的值,s 中任何零元素将被忽略。
s 中在 i 和 j 处的重复值将被叠加。 
注意:如果i或j任意一个大于最大整数值范围,2^31-1, 稀疏矩阵不能被创建。 

S = sparse(i,j,s,m,n) 
用 nzmax = length(s) 
S = sparse(i,j,s) 
使m = max(i) 和 n = max(j),在s中零元素被移除前计算最大值,[i j s]中其中一行可能为[m n 0]。
S = sparse(m,n) 
sparse([],[],[],m,n,0)的缩写,生成一个m*n的所有元素都是0的稀疏矩阵。 


备注:
MATLAB中所有内置的算术,逻辑和索引操作都可以应用到稀疏矩阵或混合于稀疏和全矩阵上。
稀疏矩阵的操作返回稀疏矩阵,全矩阵的操作返回权矩阵。 
在大多数情况下,稀疏和全矩阵的混合操作返回全矩阵,例外的一种情况是混合操作的结果在结构上稀疏,例如,A.*S至少和矩阵S一样稀疏。 

应用举例:
S = sparse(1:n,1:n,1) 生成一个n*n的单位稀疏矩阵,和S = sparse(eye(n,n))有相同的结果,但是如果它的元素大部分是零元素的情况下也会暂时性的生成n*n的全矩阵。 

B = sparse(10000,10000,pi) 可能不是非常有用的,但是它是能运行和允许的,它生成一个10000*10000的仅仅包含一个非零原色的矩阵,不要用full(B),因为这需要800兆储存单元。 

分析和重组一个稀疏矩阵: 
[i,j,s] = find(S); 
[m,n] = size(S); 
S = sparse(i,j,s,m,n); 

如果最后一行和最后一列是非零项,有下面: 
[i,j,s] = find(S); 
S = sparse(i,j,s);

 

MATLAB中的full matrix和sparse matrix

对full matrix和sparse matrix的理解:其实这只是matlab中存储稀疏矩阵的两种方法。

 

MATLAB函数sparse简介
函数功能:
这个函数与稀疏矩阵有关。
先说MATLAB中两个概念:full storage organization(对应于full matrix)和sparse storage organization(对应于sparse matrix)。
而要说明这两个概念,需要介绍稀疏矩阵的概念。
一般意义上的稀疏矩阵,就是看起来很松散的,也就是说,在这个矩阵中,绝大多数元素是零。例如:
0, 0, 0, 0;
0, 0, 1, 0;
0, 0, 0, 0;
0, 1, 0, 2;


计算机存储稀疏矩阵可以有两种思路:
1.按照存储一个普通矩阵一样存储一个稀疏矩阵,比如上面这个稀疏矩阵中总共十六个元素(三个非零元素),把这些元素全部放入存储空间中。这种存储方式,在matlab就叫做full storage organization。
2.只存储非零元素,那么怎么存储呢?
(4,2)        1
(2,3)        1
(4,4)        2
看出来了吧, 只存储非零元素在稀疏矩阵中的位置和值。比如,上面所举的这个例子,值为2的项在第4行第4列,那么我们就只需要存储这一非零项在稀疏矩阵中的“坐标”(4,4)和这一非零项的值2。在MATLAB中,这种存储方式就叫做sparse storage organization。虽然,这样要多存储一组坐标,但如果稀疏矩阵中非零元素非常少,以这种存储方式存储稀疏矩阵反而节省了内存空间。


为什么matlab中会同时存在这两种存储方式呢?
第一种方式, 更加直观,进行矩阵运算时(比如稀疏矩阵的乘法),算法简单易实现。
而第二种方式,虽然有时可以节省存储数据时占用的存储空间,但进行运算时需要专门的算法实现(使用C语言编写过稀疏矩阵乘法的同学应该能体会到)。


sparse函数的功能就是把以第一种存储形式存储的稀疏矩阵转换成第二种形式存储(其实这个函数更重要的功能是构建稀疏矩阵,这里不再讨论)。对应的函数为full,即把以第二种方式存储的稀疏矩阵转换成第一种方式存储。
在MATLAB中,存储一个稀疏矩阵有两种方法。
语法格式:
S = sparse(A)
S = sparse(i,j,s,m,n,nzmax)
S = sparse(i,j,s,m,n)
S = sparse(i,j,s)
S = sparse(m,n)
各种语法格式详见MATLAB帮助文档。
相关函数:
full、issparse


程序示例
>> A = [0, 0, 0, 0;
0, 0, 1, 0;
0, 0, 0, 0;
0, 1, 0, 2];
>> sparse(A)
ans =
   (4,2)        1
   (2,3)        1
   (4,4)        2

当然sparse函数还可以通过一定规则构造稀疏矩阵,这里就不多说了。

这篇关于matlab——sparse函数和full函数(稀疏矩阵和非稀疏矩阵转换)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1015454

相关文章

C++ Sort函数使用场景分析

《C++Sort函数使用场景分析》sort函数是algorithm库下的一个函数,sort函数是不稳定的,即大小相同的元素在排序后相对顺序可能发生改变,如果某些场景需要保持相同元素间的相对顺序,可使... 目录C++ Sort函数详解一、sort函数调用的两种方式二、sort函数使用场景三、sort函数排序

C语言函数递归实际应用举例详解

《C语言函数递归实际应用举例详解》程序调用自身的编程技巧称为递归,递归做为一种算法在程序设计语言中广泛应用,:本文主要介绍C语言函数递归实际应用举例的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录前言一、递归的概念与思想二、递归的限制条件 三、递归的实际应用举例(一)求 n 的阶乘(二)顺序打印

Python实现AVIF图片与其他图片格式间的批量转换

《Python实现AVIF图片与其他图片格式间的批量转换》这篇文章主要为大家详细介绍了如何使用Pillow库实现AVIF与其他格式的相互转换,即将AVIF转换为常见的格式,比如JPG或PNG,需要的小... 目录环境配置1.将单个 AVIF 图片转换为 JPG 和 PNG2.批量转换目录下所有 AVIF 图

详解如何通过Python批量转换图片为PDF

《详解如何通过Python批量转换图片为PDF》:本文主要介绍如何基于Python+Tkinter开发的图片批量转PDF工具,可以支持批量添加图片,拖拽等操作,感兴趣的小伙伴可以参考一下... 目录1. 概述2. 功能亮点2.1 主要功能2.2 界面设计3. 使用指南3.1 运行环境3.2 使用步骤4. 核

C/C++错误信息处理的常见方法及函数

《C/C++错误信息处理的常见方法及函数》C/C++是两种广泛使用的编程语言,特别是在系统编程、嵌入式开发以及高性能计算领域,:本文主要介绍C/C++错误信息处理的常见方法及函数,文中通过代码介绍... 目录前言1. errno 和 perror()示例:2. strerror()示例:3. perror(

Kotlin 作用域函数apply、let、run、with、also使用指南

《Kotlin作用域函数apply、let、run、with、also使用指南》在Kotlin开发中,作用域函数(ScopeFunctions)是一组能让代码更简洁、更函数式的高阶函数,本文将... 目录一、引言:为什么需要作用域函数?二、作用域函China编程数详解1. apply:对象配置的 “流式构建器”最

Java实现时间与字符串互相转换详解

《Java实现时间与字符串互相转换详解》这篇文章主要为大家详细介绍了Java中实现时间与字符串互相转换的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、日期格式化为字符串(一)使用预定义格式(二)自定义格式二、字符串解析为日期(一)解析ISO格式字符串(二)解析自定义

在java中如何将inputStream对象转换为File对象(不生成本地文件)

《在java中如何将inputStream对象转换为File对象(不生成本地文件)》:本文主要介绍在java中如何将inputStream对象转换为File对象(不生成本地文件),具有很好的参考价... 目录需求说明问题解决总结需求说明在后端中通过POI生成Excel文件流,将输出流(outputStre

python+opencv处理颜色之将目标颜色转换实例代码

《python+opencv处理颜色之将目标颜色转换实例代码》OpenCV是一个的跨平台计算机视觉库,可以运行在Linux、Windows和MacOS操作系统上,:本文主要介绍python+ope... 目录下面是代码+ 效果 + 解释转HSV: 关于颜色总是要转HSV的掩膜再标注总结 目标:将红色的部分滤

利用Python开发Markdown表格结构转换为Excel工具

《利用Python开发Markdown表格结构转换为Excel工具》在数据管理和文档编写过程中,我们经常使用Markdown来记录表格数据,但它没有Excel使用方便,所以本文将使用Python编写一... 目录1.完整代码2. 项目概述3. 代码解析3.1 依赖库3.2 GUI 设计3.3 解析 Mark