标签: sparse-matrix

求解带对角矩阵的最佳算法是什么?

我试图找出解决五对角矩阵的最佳方法。有没有比高斯消去法更快的东西?

language-agnostic matrix sparse-matrix

2
推荐指数
1
解决办法
2740
查看次数

boost压缩矩阵存储

提升ublas::compressed_matrix应该只为非零元素分配空间。但在下面的例子中,我得到了奇怪的结果。

#include <boost/numeric/ublas/matrix_sparse.hpp>
#include <boost/numeric/ublas/io.hpp>

using namespace std;
using namespace boost::numeric::ublas;

int main () {
{
    compressed_matrix<double,row_major> m (4, 4, 2*2);
    cout << sizeof(m) << "\n";    // prints 56
    cout << m << std::endl;
}

{
    matrix<double> m (4, 4);
    cout << sizeof(m) << "\n";    // prints 20
    cout << m << std::endl;
}

return 0;
}
Run Code Online (Sandbox Code Playgroud)

为什么ublas::matix只取20字节4x4 matrix(而不是8*4*4=128字节),ublas::compressed_matrix而非2*2=4零元素则取56字节(而不是4*8=32字节)?

我还很困惑如何指定 中非零元素的位置ublas::compressed_matrix …

c++ boost sparse-matrix

2
推荐指数
1
解决办法
1083
查看次数

连接稀疏矩阵特征

我在 Eigen 中有两个稀疏矩阵,我想将它们垂直连接成一个。例如,代码的目标是:

SparseMatrix<double> matrix1;
matrix1.resize(10, 10);
SparseMatrix<double> matrix2;
matrix2.resize(5, 10);

SparseMatrix<double> MATRIX_JOIN;
MATRIX_JOIN.resize(15, 10);
MATRIX_JOIN << matrix1, matrix2;
Run Code Online (Sandbox Code Playgroud)

我在论坛上找到了一些解决方案,但是我无法实施。

垂直连接矩阵的正确方法是什么?

编辑

我的实现:

SparseMatrix<double> L;
SparseMatrix<double> C;
// ... (Operations with the matrices)
SparseMatrix<double> EMATRIX;
EMATRIX.resize(L.rows() + C.rows(), L.cols());
EMATRIX.middleRows(0, L.rows()) = L;
EMATRIX.middleRows(L.rows(), C.rows()) = C;
Run Code Online (Sandbox Code Playgroud)

我收到类型错误,根据编译器的说法,右侧是 Eigen::Block 而左侧是 Eigen::SparseMatrix

c++ sparse-matrix eigen

2
推荐指数
1
解决办法
2543
查看次数

用犰狳加载大型矩阵

我有一个非常稀疏的矩阵,密度约为0.01,维度为20000 x 500000。我正在尝试在犰狳中加载它

sp_mat V;
V.load(filename, coord_ascii);
Run Code Online (Sandbox Code Playgroud)

文件格式为

row column value
Run Code Online (Sandbox Code Playgroud)

但这花费的时间太长了。Python可以解析该文件,并填写一本字典用它的方式快于犰狳可以创建这个矩阵。我应该如何正确地做到这一点?

矩阵将填充整数。

任何意见,将不胜感激!

更新:

这是犰狳独有的问题。当逐行读取时,C++ 可以毫无问题地迭代文件,但是将值分配给 anarma::sp_mat的速度非常慢。

c++ sparse-matrix armadillo

2
推荐指数
1
解决办法
2246
查看次数

如何从 github python 安装“sparse_dot_topn”

我想sparse_dot_topn从github安装在python中。但我不知道该怎么做。我做到了:pip3 install sparse_dot_topn但它失败了。我sparse_dot_topn在 github 中看到并尝试在 jupyter notebook 中运行代码,但我无法成功。也许我做错了什么。你能帮我sparse_dot_topn从github安装的步骤吗?提前谢谢了!

python github sparse-matrix

2
推荐指数
1
解决办法
3514
查看次数

矩阵类 (dgCMatrix) 的 rowsum 函数的等效项

对于基本的 R 矩阵类,我们有一个rowsum函数,它可以非常快速地计算跨行组的列总和。

Matrix 包中是否有等效的功能或方法?

rowsum对大型 dgCMatrix 对象(即数百万行,但大约 95% 稀疏)的快速替代方案特别感兴趣。

r matrix sparse-matrix rowsum

2
推荐指数
1
解决办法
873
查看次数

R:如何构造重复单位矩阵

R 中是否有函数可以轻松构造重复的单位矩阵(不确定这是否正确)?

这是我目前正在使用的,但它有点麻烦且不直观:

Ngroups   <- 3
NperGroup <- 2
Z <- diag(Ngroups)[rep(1:Ngroups, each = NperGroup), ]

> Z
     [,1] [,2] [,3]
[1,]    1    0    0
[2,]    1    0    0
[3,]    0    1    0
[4,]    0    1    0
[5,]    0    0    1
[6,]    0    0    1
Run Code Online (Sandbox Code Playgroud)

r matrix sparse-matrix

2
推荐指数
1
解决办法
113
查看次数

如何创建稀疏对角矩阵?

可能是一个非常愚蠢的问题,但我似乎找不到在 R 中创建稀疏对角矩阵的正确方法。我找到了函数:

  • diag.spam()
  • spdiags()

并将它们与下载的库Matrix和包一起使用spam,但 R 似乎无法识别这些函数。有人知道我需要下载的函数或库吗?

我需要它,因为我想创建大于 256 x 256 的对角矩阵。

r sparse-matrix diagonal

2
推荐指数
1
解决办法
590
查看次数

(稀疏)2D numpy 数组的每行/列的快速非零索引

我正在寻找获取每行和每列二维数组非零索引列表的最快方法。以下是一段工作代码:

preds = [matrix[:,v].nonzero()[0] for v in range(matrix.shape[1])]
descs = [matrix[v].nonzero()[0] for v in range(matrix.shape[0])]
Run Code Online (Sandbox Code Playgroud)

示例输入:

matrix = np.array([[0,0,0,0],[1,0,0,0],[1,1,0,0],[1,1,1,0]])
Run Code Online (Sandbox Code Playgroud)

示例输出

preds = [array([1, 2, 3]), array([2, 3]), array([3]), array([], dtype=int64)]
descs = [array([], dtype=int64), array([0]), array([0, 1]), array([0, 1, 2])]
Run Code Online (Sandbox Code Playgroud)

(这些列表被称为 preds 和 descs,因为当矩阵被解释为邻接矩阵时,它们指的是 DAG 中的前辈和后裔,但这对问题来说并不重要。)

时序示例: 出于时序目的,以下矩阵是一个很好的代表:

test_matrix = np.zeros(shape=(4096,4096),dtype=np.float32)
for k in range(16):
    test_matrix[256*(k+1):256*(k+2),256*k:256*(k+1)]=1
Run Code Online (Sandbox Code Playgroud)

背景:在我的代码中,对于 4000x4000 矩阵,这两行占用了 75% 的时间,而随后的拓扑排序和 DP 算法只占用了四分之一的时间。矩阵中大约 5% 的值是非零值,因此可能适用稀疏矩阵解决方案。

谢谢你。

(关于这里发布的建议:https : //scicomp.stackexchange.com/questions/35242/fast-nonzero-indices-per-row-column-for-sparse-2d-numpy-array 那里也有答案我将在评论中提供时间。此链接包含一个已接受的答案,速度是其两倍。

python arrays numpy scipy sparse-matrix

2
推荐指数
1
解决办法
277
查看次数

将稀疏邻接列表转换为 R 中的完整矩阵

我在这个网站上的研究中看到了类似的问题,但不是这个确切的问题(大多数答案都涉及从列表中创建一个稀疏矩阵)。

我有一个相邻多边形列表,但希望将其转换为完整矩阵。我可以用嵌套的 for 循环笨拙地做到这一点,但我试图通过减少依赖这些来改进我的编码。所以本质上,我想从中得到:

my_list <- list("1" = c(2, 3),
                "2" = 1,
                "3" = 1)
Run Code Online (Sandbox Code Playgroud)

看起来像这样的东西:

#     [,1] [,2] [,3]
#[1,]    0    1    1
#[2,]    1    0    0
#[3,]    1    0    0
Run Code Online (Sandbox Code Playgroud)

不诉诸于此:

for(i in 1:3{
 for(j in 1:3{
  [look to list to see if there is a value corresponding to (i, j),
   if so insert 1, if not, zero]
 }
}
Run Code Online (Sandbox Code Playgroud)

非常感谢您的宝贵时间。

r list matrix apply sparse-matrix

2
推荐指数
1
解决办法
55
查看次数