本文概述

声明普通数组后, MATLAB将为数组中的每个元素创建一个内存位置。例如, 函数a =眼睛(10)将创建100个元素, 这些元素排列为10 x 10结构。在此数组中, 其中90个元素为零!

该矩阵需要100个元素, 但是只有10个元素包含非零数据。这是稀疏数组或稀疏矩阵的示例。

稀疏矩阵是其中大部分元素为零的大型矩阵。

现在假设我们创建另一个10 x 10矩阵b, 定义如下:

如果将这两个矩阵相乘, 则结果为

稀疏属性

MATLAB具有double数据类型的特定版本, 该版本旨在与稀疏数组一起使用。

在double数据类型的此特定版本中, 仅为数组的非零元素分配了内存位置, 并且据说该数组具有”稀疏”属性。

具有稀疏属性的数组将为每个非零元素保存三个值:元素本身的值以及元素所在的行号和列号。即使每个非零元素必须保存三个值, 但是如果矩阵只有几个非零元素, 则此方法比分配完整数组要有效得多。

为了说明稀疏矩阵的用法, 我们将创建一个10 x 10的单位矩阵:

如果使用函数sparse将此矩阵转换为稀疏矩阵, 则结果为

如果我们像whos命令一样检查数组a和, 结果为

» whos

Name Size Bytes Class Attributes

a 10x10 800 double

as 10x10 164 double sparse

一个数组占用800个字节, 因为有100个元素, 每个元素有8个字节的存储空间。 as数组占用164个字节, 因为有10个非零元素, 每个元素有8个字节的存储空间, 再加上20个数组索引, 每个数组索引分别占4个字节和4个字节的开销。请注意, 稀疏阵列比完整阵列占用的内存少得多。

函数issparse可用于确定给定数组是否稀疏。如果数组很稀疏, 则issparse(数组)将返回true(1)。

稀疏数据类型的功效可以通过考虑每行平均有4个非零元素的1000 x 1000矩阵z来看出。如果此矩阵存储为完整矩阵, 则将需要8, 000, 000字节的空间。另一方面, 如果将其转换为稀疏矩阵, 则内存使用量将急剧下降。

» zs = sparse(z);

» whos

Name Size Bytes Class

z 1000x1000 8000000 double array

zs 1000x1000 51188 sparse array

Grand total is 1003932 elements using 8051188 bytes.

生成稀疏矩阵

MATLAB可以通过使用稀疏函数将完整矩阵转换为稀疏矩阵或通过使用MATLAB函数speye, sprand和sprandn直接制作稀疏矩阵来生成稀疏矩阵, speye, sprand和sprandn是eye, rand和randn的稀疏等效项。

For example, the expression a = speye(4) generates a 4 x 4 sparse matrix.

» a = speye(4)

a =

(1, 1) 1

(2, 2) 1

(3, 3) 1

(4, 4) 1

表达式b = full(a)将稀疏矩阵转换为full矩阵。

» b = full (a)

b =

1 0 0 0

0 1 0 0

0 0 1 0

0 0 0 1

使用稀疏矩阵

一旦使矩阵变得稀疏, 就可以使用简单的赋值语句将单个元素添加到其中或从中删除。

例如, 以下语句生成一个4 x 4稀疏矩阵, 然后向其添加另一个非零元素:

» a = speye (4)

a =

(1, 1) 1

(2, 2) 1

(3, 3) 1

(4, 4) 1

» a (2, 1) = -2

a =

(1, 1) 1

(2, 1) -2

(2, 2) 1

(3, 3) 1

(4, 4) 1

稀疏矩阵函数

该表显示在处理稀疏矩阵时最常用的一些功能。

Function

Description

full

它将稀疏矩阵转换为完整矩阵。

issparse

它确定矩阵是否稀疏。

nnz

它返回非零矩阵元素的数量。

nonzeros

它返回矩阵的非零元素。

nzmax

它返回分配给非零元素的存储量。

spalloc

它为稀疏矩阵分配空间。

sparse

它创建一个稀疏矩阵或将完整的转换为稀疏。

speye

它创建一个稀疏身份矩阵。

sprand

它创建一个稀疏均匀分布的随机矩阵。

sprandn

它创建一个稀疏的正态分布随机矩阵。

find

它查找矩阵中非零元素的索引和值。

spones

它将非零稀疏矩阵元素替换为1。

spfun

它将函数应用于非零矩阵元素

spy

它将稀疏模式可视化为情节。

matlab 稀疏随机矩阵,MATLAB中的稀疏数组相关推荐

  1. matlab二重指针,VC++中函数返回数组指针或者带指针的结构体的编译方式是否可取? - 程序语言 - 小木虫 - 学术 科研 互动社区...

    libralibra 构造函数+析构函数应该是比较正规的做法吧, 你的结构体/类被提早释放的问题,是不是那个结构体是局部变量,当超出作用域时对象被销毁,如果存在析构函数,会被默认调用, 如果你返回结构 ...

  2. matlab 稀疏随机矩阵,Matlab 稀疏矩阵函数

    Matlab 稀疏矩阵函数 (2012-03-08 09:54:54) 标签: 杂谈 eye 单位矩阵 zeros 全零矩阵 ones 全1矩阵 rand 均匀分布随机阵 genmarkov 生成随机 ...

  3. matlab中非0即1函数,matlab 中统计一个数组中非零元素个素的函数名称是什么?

    可以自己写一个函数用来给数组排序.或者用MATLAB自带的 Matlab 用sort函数排序 二维数组2008-09-14 22:51在Matlab中排序某个向量(一维)时,可以使用sort(A),其 ...

  4. matlab mxarray赋值,C++中数组与MATLAB mxArray相互赋值

    完成功能下: C++中产生一个256X256大小的数组A;现在要在这个数组显示为一个灰度图像,然后把该数组里面的每一个值乘2后返回给原数组: C++程序如下: #include "stdaf ...

  5. matlab如何读取二维数组,Matlab从csv文件中读取多个二维数组

    我有一个csv文件,它包含2列4列数组,但行数不等.例如:Matlab从csv文件中读取多个二维数组 2, 354, 23, 101 3, 1023, 43, 454 1, 5463, 45, 765 ...

  6. Matlab中的向量和数组(超详细)

    Matlab中的向量和数组(超详细) 文章目录 Matlab中的向量和数组(超详细) Matlab中的向量 介绍 创建向量 向量的大小 索引向量 数值索引 逻辑索引 缩短向量 向量运算 算术运算 逻辑 ...

  7. JavaScript中的稀疏数组与密集数组

    一般而言,javaScript中的数组是稀疏的,也就是说数组中的元素之间可以有空隙,因为一个数组其实就是一个键值映射.这篇本文解释了如何创建稀疏数组和不稀疏的数组,以及稀疏数组和密集数组之间的区别. ...

  8. matlab 数组差分,matlab中计算三维数组的差分

    满意答案 dqnic2013 2016.04.15 采纳率:50%    等级:7 已帮助:411人 (1)在Matlab中习惯性的会将二维数组中的第一维称为"行"第二维称为&qu ...

  9. matlab dct稀疏系数,Matlab DCT详解

    转自:http://blog.csdn.net/ahafg/article/details/48808443 DCT变换 DCT又称离散余弦变换,是一种块变换方式,只使用余弦函数来表达信号,与傅里叶变 ...

最新文章

  1. Ansible05-部署文件
  2. FindBugs工具常见问题
  3. C++ 标准库类型 vector
  4. 在理解通用近似定理之前,你可能都不会理解神经网络
  5. android 官方教程中文版
  6. STL-容器库101--array【C11】
  7. django model filter 条件过滤,及多表连接查询、反向查询,某字段的distinct
  8. 重写、重构、重载区别
  9. soap rest_REST是新的SOAP
  10. 爬取上千个年度基金后,才知道这有多坑,千万别被人当韭菜给割了
  11. SQL server学习
  12. 【图像融合】基于matalb小波变换(加权平均法+局域能量+区域方差匹配)图像融合【含Matlab源码 1819期】
  13. 简繁体计算机术语对照表
  14. 【错误解决】Ubuntu20.04安装输入法遇到的问题
  15. 去水印原理_图片去水印|视频去水印
  16. 使用ADO控件连接“文件DSN”
  17. 计算机酷睿处理器排行,英特尔酷睿处理器哪个型号好?2018年4月电脑CPU性能排名...
  18. 腾讯程序员月薪7万,小编感觉自己像码畜...
  19. 前端-HTML基础入门
  20. 个人微信号二次开发sdk协议,微信个人号开发API接口

热门文章

  1. viper监控文件变化出现两次事件
  2. 雷达传感器融合相关调研
  3. 比超级计算机快千万倍!我国量子计算研究获重要进展
  4. web基础学习(六)CSS3 文字阴影、文本溢出、服务器字体
  5. 计算机思维与音乐关系,浅谈音乐与思维的联系.PDF
  6. 用CMD命令清理电脑垃圾
  7. 传奇人物《周兴和》书连载10 处心积虑揽工程
  8. python hive mysql_[7] 编写Python脚本将Hive的运算结果保存到MySQL数据库中(1) - 摩西莫西 - ITeye技术网站...
  9. 1024程序员节书单,15本顶级精选好书,助你做项级程序员
  10. 【解决】农业银行如何取消短信通知