Tag: 稀疏矩阵

寻找一个C / C ++接口,用于在Linux中高效计算庞大的稀疏矩阵

我正在寻找一个C / C ++接口,用于在Linux中高效计算庞大的稀疏矩阵。 矩阵可能是数百万/数千万。 我检查了一些现有的库,但似乎没有一个满足我的所有要求, 1,我需要通过动态添加元素来创建稀疏矩阵。 (不适用于SparseLib ++) 2,我还需要能够创建稀疏对角矩阵,以便我可以使用不同的标量缩放另一个稀疏矩阵的列。 (没有为此找到一个库,也许还有另一种方法可以按列缩放稀疏矩阵) 3,需要支持矩阵运算与矩阵/向量相乘(许多库支持这些基本运算) 4,它需要支持两个稀疏矩阵或向量之间的入口乘法或除法,如MATLAB中的。*或./(没有为此找到一个库,我需要这个操作来筛选一个稀疏的一些条目矩阵与另一个稀疏矩阵) 5,矩阵求逆或线性求解器。 (大多数库提供线性系统的求解器) 我最初在Python中使用scipy来实现我的算法。 Python消耗太多内存而且速度很慢,这就是我想将程序转换为C的原因。 谢谢。

使用CSparse库在C中表示稀疏矩阵

我无法理解如何使用CSparese库轻松表示C中的稀疏矩阵。 这就是我想要的 | 6.0 0.0 2.0 | A = | 3.0 8.0 0.0 | | 6.0 0.0 1.0 | with | 40.0 | b = | 50.0 | | 30.0 | csparse的cs Struct就是这个 typedef struct cs_sparse /* matrix in compressed-column or triplet form */ { csi nzmax ; /* maximum number of entries */ csi […]

使用C中的链接列表创建稀疏矩阵

我有一个任务是创建两个稀疏矩阵(A和B),然后将它们加到第三个稀疏矩阵(C)中。 我已经用向量做了它(接收两个稀疏向量并将它们添加到第三个)所以我决定使用一系列向量来表示矩阵会更容易。 在将来,我可能需要在没有向量的情况下使用实际矩阵(我甚至有一个函数的伪代码将数字插入稀疏矩阵),所以要理解为什么我要问所有这些,即使以下代码有点工作。 因为它是一个矩阵,所以它有两个指针数组,即行数组和列数组。 数组的每个单元格指向相应的行/列。 如下图所示: 作为稀疏矩阵,在有零的情况下,您会看到那些箭头,因为那些带有零的节点不存在。 为了简化这个问题,我更喜欢只处理行数组,如图所示,这些行指向每个新行的头部。 假设每一行都是一个向量C(就像我上面说的,我想用一系列向量表示矩阵)。 这是我构建的所有链表function的代码: typedef struct List_node { int key; int i,j; struct List_node *next; }List_node; typedef struct List { List_node *head; }List; List *create_list() { List *list = (List*)malloc(sizeof(List)); list->head = NULL; return list; } void insert_first(List_node *x, List *list) { x->next = list->head; list->head = x; } […]

在MEX中创建稀疏矩阵

如何在用C编写的MEX文件中创建一个2d稀疏矩阵。创建矩阵之后如何像C一样单独访问元素,比如mat[i][j] ? 我厌倦了使用mxCreateNumericArray函数,但我无法访问元素并将其作为稀疏矩阵。 请帮忙