R AMD排序在Matlab和特征库中是不同的
尽管近似最小度置换函数似乎基于Egeng[,]和Matlab[]的相同底层代码(Timothy A.Davis的代码打包在套件稀疏库中),但通过RcppEigen包调用Egeng例程时,我在相同的数据矩阵上得到了不同的结果 下面是一个通过内联接口调用的matlab/octave代码(给出相同的结果)和Eigen的最小示例 Matlab/倍频程:R AMD排序在Matlab和特征库中是不同的,r,matlab,linear-algebra,rcpp,eigen,R,Matlab,Linear Algebra,Rcpp,Eigen,尽管近似最小度置换函数似乎基于Egeng[,]和Matlab[]的相同底层代码(Timothy A.Davis的代码打包在套件稀疏库中),但通过RcppEigen包调用Egeng例程时,我在相同的数据矩阵上得到了不同的结果 下面是一个通过内联接口调用的matlab/octave代码(给出相同的结果)和Eigen的最小示例 Matlab/倍频程: A = gallery('wathen',2,2); p = amd(A); save('amddemo.mat', 'A', 'p') R 示例输出
A = gallery('wathen',2,2);
p = amd(A);
save('amddemo.mat', 'A', 'p')
R
示例输出是
1 2 4 5 6 8 15 3 7 9 10 11 12 13 14
5 9 4 7 10 2 8 15 11 6 12 14 13 1 3
其中第一个解来自Eigen库,第二个来自Octave。你也可以发布添加的数值结果,尽管我相信数据是随机生成的,所以ymmv。Eigen的版本与原始代码不同,用于处理在对角线上有一些显式零的半定矩阵。这是我能记得的主要变化。你也可以尝试“简单的特征”作为C++程序,只是为了排除我们在创建稀疏矩阵时做了一些傻事吗?我还调整了AMD代码,以便不依赖于自伴算子。这似乎没什么帮助。你能不能也把数字结果贴出来,虽然我相信数据是随机生成的,所以ymmv。Eigen的版本与原始代码不同,它可以处理在对角线上有一些显式零的半定矩阵。这是我能记得的主要变化。你也可以尝试“简单的特征”作为C++程序,只是为了排除我们在创建稀疏矩阵时做了一些傻事吗?我还调整了AMD代码,以便不依赖于自伴算子。但似乎没什么帮助。
g++ -I /usr/local/lib/R/site-library/RcppEigen/include/ amdtest.cpp -o amdtest
amdtest > dat.txt
octave -qf amdtest.m dat.txt
1 2 4 5 6 8 15 3 7 9 10 11 12 13 14
5 9 4 7 10 2 8 15 11 6 12 14 13 1 3