Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 犰狳稀疏矩阵CSC-如何存储零值_C++_Matrix_Julia_Sparse Matrix_Armadillo - Fatal编程技术网

C++ 犰狳稀疏矩阵CSC-如何存储零值

C++ 犰狳稀疏矩阵CSC-如何存储零值,c++,matrix,julia,sparse-matrix,armadillo,C++,Matrix,Julia,Sparse Matrix,Armadillo,Armadillo(C++线性代数库:)支持稀疏矩阵的初步版本(在CSC存储模型中)。正如我在文档和代码中所读到的,犰狳稀疏矩阵实现没有区分零值和“未设置”值。 文档中说,所有存储的值都是非零的,通过推断,所有非存储的值都是零。相反,我需要的是区分“unset”和“zero” 目前,我将一个Julia项目移植到C++/Armadillo,在这里我需要处理一些具有-1、0、1和“unset”值的稀疏矩阵。与犰狳不同,Julia在稀疏矩阵实现中区分了零和“unset” 我的第一个想法可能是使用复数稀

Armadillo(C++线性代数库:)支持稀疏矩阵的初步版本(在CSC存储模型中)。正如我在文档和代码中所读到的,犰狳稀疏矩阵实现没有区分零值和“未设置”值。

文档中说,所有存储的值都是非零的,通过推断,所有非存储的值都是零。相反,我需要的是区分“unset”和“zero”

目前,我将一个Julia项目移植到C++/Armadillo,在这里我需要处理一些具有-1、0、1和“unset”值的稀疏矩阵。与犰狳不同,Julia在稀疏矩阵实现中区分了零和“unset”

我的第一个想法可能是使用复数稀疏矩阵(arma::sp_cx_mat,arma::sp_cx_imat)和一些小技巧来管理相似的零值(利用虚拟的非零部分)。但这确实不优雅,而且肯定会影响代码性能

你认为有没有一种方法可以绕过犰狳的限制而不编写自己的矩阵类


非常感谢您的回答。

这可能不受支持(但我只是猜测),因为这是一个流行的设计决策,即使是在Matlab中完成的。也许最好通过分析julia码来说明这种用法的必要性,或者改变原来稀疏矩阵的用法。利用is关联矩阵生成电子电路的拓扑矩阵需要julia码。简而言之,julia算法是关联矩阵(+/-1)的移位/置换,其中0是(-1到+1)范围内的特例。修改此函数需要对框架的大量其他部分进行深入重构。Julia以两种方式管理非零值:非零值(存储在矩阵中的所有值)和真正的非零值(存储在矩阵中的除零值以外的所有值)。在没有太多知识的情况下,基本问题只是:它们获得了什么?大多数情况下,这种显式的零使用只是为了性能(因为将某些内容重置为零可能会很昂贵)。因此,使用经典稀疏矩阵不存在算法问题,尽管它可能较慢。但是你当然是对的,代码中可能隐藏了很多东西。我认为有一些关于nnz和co的激烈讨论。;它应该如何处理这些显式零。在稀疏矩阵中,所有的值都被初始化为零,所以不要设置零值?如果从稀疏矩阵读取非设置值,它应该返回零(与
未设置
)相反)。@maximecorevits我看了julia文档后明白了你的意思。julia实现是非标准的。你的问题是犰狳不允许在is稀疏矩阵中存储零值。这真的没有意义,armadillo永远不会增加对“存储”零值的支持。实数矩阵是一个数学对象,不能有“未设置”的值。