主要内容

稀疏的

创建稀疏矩阵

描述

例子

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

例子

s =稀疏(M,N.生成一个-经过-n全零稀疏矩阵。

例子

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

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

例子

s =稀疏(我,我vM,N.指定大小年代作为-经过-n

例子

s =稀疏(我,我vM,N.新西兰分配空间新西兰非零元素。使用此语法为施工后填充非零值的额外空间。

例子

全部折叠

创建一个10,000×10,000个完全存储标识矩阵。

a =眼睛(10000);谁一个
名称大小字节类属性a 10000x10000 800000000双倍

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

将矩阵转换为稀疏存储。

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

在稀疏形式中,相同的矩阵使用大约0.25兆字节的内存。在这种情况下,您可以通过使用完全避免完全存储speye函数,它直接创建稀疏单位矩阵。

s =稀疏(10000,5000)
S =全零稀疏:10000x5000

从三胞胎创建1500×1500稀疏矩阵j,v

我= [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.非零值,但其中有空间分配100.非零值。

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

spalloc.函数是一种创建稀疏矩阵的简写方法没有非零元素,但有空间分配了一些非安利斯。

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

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

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

并排可视化下标和值。

(i, j, v)
ans =8×36 1 100 6 11 202 6 11 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(i)n = max(j)在忽略任何零元素之前v

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

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

如果没有指定n,然后稀疏的使用默认值m = max(i)n = max(j).这些最大值是在任何零之前计算的v被删除了。

数据类型:双倍的

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

对于稀疏矩阵,年代,NNZ.函数返回矩阵中的非零元素的数量,以及nzmax.函数返回分配给非零矩阵元素的存储空间。如果NNZ(S)nzmax (S)返回不同的结果,则可能分配比实际需要更多的存储空间。因此,set新西兰只是期待着以后的补缺。

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

数据类型:双倍的

限制

  • 如果输入我,我M,N.更大比2 ^ 31-1对于32位平台,或2 ^ 48-1在64位平台上,不能构建稀疏矩阵。

提示

  • 马铃薯®以压缩稀疏列格式存储稀疏矩阵。有关更多信息,请参阅John R. Gilbert,Cleve Moler和Robert Schreiber's稀疏矩阵的马铃薯:设计和实施

  • accumarray函数对此具有类似的累积行为稀疏的

    • accumarray使用将数据分组到binsn- 实证下标,但稀疏的使用二维下标将数据分组到容器中。

    • accumarray默认情况下添加具有相同下标的元素,但可以选择将任何功能应用于垃圾箱。稀疏的适用函数与具有相同下标进入输出的元素(用于双值)或应用任何函数(用于逻辑值)。

扩展能力

之前介绍过的R2006a