主要内容

稀疏的

创建稀疏矩阵

描述

例子

S =稀疏(一个通过压缩出任何零元素将一个完整矩阵转换为稀疏形式。如果一个矩阵包含多个零,将矩阵转换为稀疏存储可以节省内存。

例子

S =稀疏(m, n生成一个——- - - - - -n全零稀疏矩阵。

例子

S =稀疏(我,我,v生成稀疏矩阵年代从三胞胎,j,v这样(我(k), j (k)) = v (k).的max(我)——- - - - - -马克斯(j)输出矩阵的空间分配长度(v)非零元素。

如果输入,j,v是向量或矩阵,它们必须有相同数量的元素。另外,参数v和/或其中一个论点j可以是标量。

例子

S =稀疏(我,我,v,m, n的大小。年代作为——- - - - - -n

例子

S =稀疏(我,我,v,m, n,新西兰分配的空间新西兰非零元素。使用此语法为构造后要填充的非零值分配额外的空间。

例子

全部折叠

创建一个10,000乘10,000的完整存储标识矩阵。

一个=眼(10000);谁一个
Name Size Bytes Class Attributes A 10000x10000 800000000 double

这个矩阵使用800兆字节的内存。

将矩阵转换为稀疏存储。

S =稀疏(一个);谁年代
名称大小字节类属性S 10000x10000 240008双稀疏

在稀疏形式下,相同的矩阵大约使用0.25兆内存。在这种情况下,可以使用speye函数,它直接创建稀疏单位矩阵。

S =稀疏(10000、5000)
S =所有零稀疏:10000x5000

从三个一组创建一个1500 × 1500的稀疏矩阵,j,v

I = [900 1000];J = [900 1000];V = [10 100];S =稀疏(i, j, v, 1500年,1500年)
S = (900,900) 10 (1000,1000) 100

当您指定的大小大于max(我)——- - - - - -马克斯(j),稀疏的函数用额外的零行和列填充输出。

大小(年代)
ans =1×21500 1500

创建稀疏矩阵10非零值,但已为One hundred.非零值。

S =稀疏(1:10 1:10 5,20,20100);N = nnz (S)
N = 10
N_alloc = nzmax (S)
N_alloc = 100

spalloc函数是一种创建稀疏矩阵的快捷方式没有非零元素,但为一些非零元素分配了空间。

使用重复下标将值累加到一个稀疏矩阵中,否则将需要一个或多个循环。

创建一个数据的列向量和两个下标的列向量。

I = [6 6 6 5 10 10 9 9]';J = [1 1 2 3 3 10]';V = [100 202 173 305 410 550 323 121]';

将下标和值并列可视化。

(i, j, v)
ans =8×36 1 100 6 1 202 6 1 173 5 2 305 10 3 410 10 3 550 9 10 323 9 10 121

使用稀疏的函数来累积具有相同下标的值。

S =稀疏(i, j, v)
S = (6,1) 475 (5,2) 305 (10,3) 960 (9,10) 444

输入参数

全部折叠

输入矩阵,指定为完整或稀疏矩阵。如果一个那么已经稀疏了吗稀疏(A)返回一个

数据类型:|逻辑
复数的支持:金宝app是的

下标对,指定为标量、向量或矩阵的单独参数。对应的元素j指定S (i, j)中确定值位置的下标对v到输出。j必须具有相同的数据类型。如果任何一j是一个矢量或矩阵,那么另一个输入可以是一个标量,也可以是具有相同元素数的矢量或矩阵。在这种情况下,稀疏的使用我(:)j (:)下标。

如果j有相同的值的几个元素在v,然后稀疏的中的值聚合v有重复的指标。中的值的数据类型决定聚合行为v

  • 对于逻辑值,稀疏的应用任何函数。

  • 对于双值,稀疏的应用总和函数。

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64|逻辑

值,指定为标量、向量或矩阵。如果v是一个矢量或矩阵,然后输入之一j也必须是一个具有相同数量元素的向量或矩阵。

任何元素v它们是零,被忽略,相应的下标也被忽略j.但是,如果没有指定输出的尺寸大小,n,然后稀疏的计算出最大值m = max(我)n = max (j)中忽略任何零元素v

数据类型:|逻辑
复数的支持:金宝app是的

每个维的大小,作为整数值的单独参数指定。如果您指定(行大小),还必须指定n(列大小)。

如果不指定n,然后稀疏的使用默认值m = max(我)n = max (j).这些极大值是在输入任何零之前计算的v是删除。

数据类型:

非零元素的存储分配,指定为非负整数。新西兰一般必须大于或等于Max ([numel(i), numel(j), numel(v), 1]).但是,如果大小,j,v的值0新西兰,然后稀疏的而是将值设置为1

对于一个稀疏矩阵,年代,nnz函数返回矩阵中非零元素的个数,而nzmax函数返回为非零矩阵元素分配的存储量。如果nnz (S)nzmax (S)返回不同的结果,那么可能会分配比实际需要的更多的存储。因此,设置新西兰只是在期待以后的填补。

如果不指定新西兰,然后稀疏的使用默认值Max ([numel(i), numel(j), numel(v), 1])

数据类型:

限制

  • 如果任何输入我,我m, n更大比2 ^还有32位平台,或2 ^ 48-1在64位平台上,稀疏矩阵是无法构建的。

提示

  • MATLAB®以压缩稀疏列格式存储稀疏矩阵。欲了解更多信息,请参阅John R. Gilbert、Cleve Moler和Robert Schreiber的文章稀疏矩阵的MATLAB:设计与实现

  • accumarray函数具有与的相似的积累行为稀疏的

    • accumarray将数据分组到使用n维下标,但稀疏的使用二维下标将数据分组到箱子中。

    • accumarray在默认情况下将具有相同下标的元素添加到输出中,但可以选择性地将任何函数应用到容器中。稀疏的应用总和函数对在输出中具有相同下标的元素(对于双值)或应用任何函数(用于逻辑值)。

扩展功能

之前介绍过的R2006a