主要内容

稀疏的

创建稀疏矩阵

描述

例子

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

例子

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

例子

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

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

例子

稀疏的(我,我vm, n的大小。年代作为——- - - - - -n

例子

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

例子

全部折叠

创建一个10,000 * 10,000的完整存储单位矩阵。

A =眼(10000);谁一个
名称大小字节类属性A 10000x10000 800000000 double

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

将矩阵转换为稀疏存储。

S =稀疏(A);谁年代
名称大小字节类属性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),稀疏的函数用额外的0行和列填充输出。

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

创建一个稀疏矩阵10非零值,但为其分配了空间One hundred.非零值。

S =稀疏(1:10,1:10,5,20,20,100);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 1 2 3 3 10 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也必须是具有相同数量元素的向量或矩阵。

任何元素v0会被忽略,相应的下标也会被忽略而且j.但是,如果不指定输出的尺寸大小,而且n,然后稀疏的计算最大值M = max(i)而且N = max(j)在忽略任何零元素之前v

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

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

如果不指定而且n,然后稀疏的使用默认值M = max(i)而且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, n2 ^还有对于32位平台,或者2 ^ 48-1在64位平台上,则不能构造稀疏矩阵。

提示

  • MATLAB®以压缩稀疏列格式存储稀疏矩阵。要了解更多信息,请参阅约翰·r·吉尔伯特、克利夫·莫勒和罗伯特·施赖伯的中的稀疏矩阵MATLAB:设计与实施

  • accumarray函数的积累行为与稀疏的

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

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

扩展功能

R2006a之前介绍过