这个包的主要文件,rsparse。m,创建一个稀疏阵列的一个子类的对象MATLAB的本机稀疏数据类型,但这是健壮的反对某些缺陷和错误R2009b(礼物)。
S = rsparse(变长度输入宗量)
I / O rsparse语法和选项()相同的稀疏()。
在稀疏()将返回一个双稀疏矩阵,rsparse RobustSparseDouble()将返回一个矩阵类,一个类定义在这个包中。同样,无论稀疏()将返回一个逻辑稀疏矩阵,rsparse()将返回一个矩阵RobustSparseLogical用户定义的类。
% % % % % % % % %
示例1:索引健壮性——这由布鲁诺陈德良利用sparse-sub-access包。
> > =稀疏(100000、100000、1),%本机MATLAB稀疏矩阵
一个=
(100000,100000)1
> > B = rsparse (A), %转换为强大的类型
B =
(100000,100000)1
> >谁一个B
类属性名称大小字节
100000 x100000 400016双稀疏
B 400072 x100000 100000 RobustSparseDouble
> >(逻辑(A)) = 2,由于索引错误%错误的结果
一个=
(65408,14101)2
(100000,100000)1
> > B(逻辑(B)) = 2, % ! ! !
B =
(100000,100000)2
% % % % % % % % %
示例2:鲁棒性混合数据类型操作。
出于某种原因,MATLAB决定发行一个错误当数学操作涉及稀疏和non-double数值数据尝试:
一个= speye (3);
x =单([1,2,3]);
> > y = x * %烦人....
? ? ?错误使用= = > mtimes
稀疏的单不支持数组。万博1manbetx
然而,RobustSparse类型将默默地pre-convert双打的国外数据:
B = rsparse(一个);
> > x, y = B * %更好! ! !
y =
1
2
3
% % % % % % % % % % % % % % % % % % % % % %
我希望TMW很快会解决这些问题,使这个包过时了。一旦他们这样做了,只是取代rsparse中的代码。m以下,rsparse()将成为相当于稀疏()
函数S = rsparse(变长度输入宗量)
S =稀疏(变长度输入宗量{:});
结束
包还包括“robustified”版本的其他常见sparfun工具箱的例程:rspeye, rsprand, rsprandn, rprandsym,……他们也将恢复到本地MATLAB版本时上面的替代。
% % % % % % % %
警示:
(1)因为这个包使用各种m包装内置稀疏的例程,显然是有一些妥协的速度。
(2)我重载所有数学运算符(+,-,*,> =,< =,等)和一些常见的功能像sum()、发票(),spfun(),等等……返回RobustSparse数据类型,否则返回普通稀疏的类型。
原因很明显,但是,我不能这样做对于所有函数能够返回一个稀疏矩阵(如triu,下三角阵,罪恶,因为,等),我也不能跟上TMW版本的新功能。
因此,你应该记住,B = triu (rsparse (A))和类似的将返回一个普通稀疏的原生数据类型,B,所有的漏洞。你应该照顾发布这样的结果转换成健壮的类型,通过B = rsparse (B)。或者,你认为合适,可以添加重载方法在RobustSparseDouble模仿别人。m和RobustSparseLogical.m
引用作为
马特·J (2023)。健壮的稀疏数据类型(//www.tianjin-qmedu.com/matlabcentral/fileexchange/26181-robust-sparse-data-types), MATLAB中央文件交换。检索。