标签: umfpack

Scipy稀疏反转或spsolve导致UMFPACK_ERROR_OUT_OF_MEMORY

我试图反转一个大的(150000,150000)稀疏矩阵如下:

import scipy as sp
import scipy.sparse.linalg as splu

#Bs is a large sparse matrix with shape=(150000,150000)

#calculating the sparse inverse
iBs=splu.inv(Bs)
Run Code Online (Sandbox Code Playgroud)

导致以下错误消息:

Traceback (most recent call last):
    iBs=splu.inv(Bs)
  File "/usr/lib/python2.7/dist-packages/scipy/sparse/linalg/dsolve/linsolve.py", line 134, in spsolve
autoTranspose=True)
  File "/usr/lib/python2.7/dist-packages/scipy/sparse/linalg/dsolve/umfpack/umfpack.py", line 603, in linsolve
self.numeric(mtx)
  File "/usr/lib/python2.7/dist-packages/scipy/sparse/linalg/dsolve/umfpack/umfpack.py", line 450, in numeric
umfStatus[status]))
RuntimeError: <function umfpack_di_numeric at 0x7f2c76b1d320> failed with UMFPACK_ERROR_out_of_memory
Run Code Online (Sandbox Code Playgroud)

我重新编写了程序来简单地求解线性微分方程组:

import numpy as np

N=Bs.shape[0]

I=np.ones(N)

M=splu.spsolve(Bs,I)
Run Code Online (Sandbox Code Playgroud)

我又遇到了同样的错误

我在具有16 GB RAM的计算机上使用此代码,然后将其移动到具有32 GB RAM的服务器上,仍然无济于事.

有没有人遇到过这个?

python scipy umfpack

13
推荐指数
1
解决办法
1545
查看次数

有没有有效的方法来动态更改boost中的compress_matrix?

我正在使用ublas :: Compressed Matrix来处理稀疏线性求解器UMFPACK.由于我正在进行模拟,所以每次线性系统的构造都略有不同,可能涉及扩大/缩小系数矩阵和一些稀疏矩阵乘法.线性系统的规模约为25k.

即使有一个绑定补丁用于增强与UMFPACK一起工作,我仍然需要不时更改矩阵,有时甚至计算非零值的数量将是耗时的(理想情况下,我必须给出数字当我初始化矩阵时的非零值).另外,我使用ublas :: range动态追加列/行.

所以我的问题是:有没有有效的方法来做到这一点?现在对我来说太慢了.转换尺寸为15k的矩阵成本接近6s并且附加大约12k行是很快的(因为我猜它是行主矩阵),但是向矩阵添加相同数量的列可能花费多达20s(我想同样的如上所述,所以即使我使用了列主矩阵,所需的总时间也是相同的).

有点在这里绝望.任何建议都是受欢迎的.

干杯.

c++ boost solver sparse-matrix umfpack

10
推荐指数
1
解决办法
607
查看次数

Ax = b线性代数系统的C++内存有效解决方案

我正在使用用于Boost UBlas的数​​值库绑定来解决简单的线性系统.以下工作正常,但它仅限于处理相对较小的'm'的矩阵A(mxm).

在实践中,我有一个更大的矩阵,维数m = 10 ^ 6(最多10 ^ 7).
是否存在用于解决有效使用内存的Ax = b的现有C++方法.

#include<boost/numeric/ublas/matrix.hpp>
#include<boost/numeric/ublas/io.hpp>
#include<boost/numeric/bindings/traits/ublas_matrix.hpp>
#include<boost/numeric/bindings/lapack/gesv.hpp>
#include <boost/numeric/bindings/traits/ublas_vector2.hpp>

// compileable with this command


//g++ -I/home/foolb/.boost/include/boost-1_38 -I/home/foolb/.boostnumbind/include/boost-numeric-bindings solve_Axb_byhand.cc -o solve_Axb_byhand -llapack


namespace ublas = boost::numeric::ublas;
namespace lapack= boost::numeric::bindings::lapack;


int main()
{
    ublas::matrix<float,ublas::column_major> A(3,3);
    ublas::vector<float> b(3);


    for(unsigned i=0;i < A.size1();i++)
        for(unsigned j =0;j < A.size2();j++)
        {
            std::cout << "enter element "<<i << j << std::endl;
            std::cin >> A(i,j);
        }

    std::cout << A << std::endl;

    b(0) = 21; b(1) = 1; b(2) = …
Run Code Online (Sandbox Code Playgroud)

c++ boost linear-algebra lapack umfpack

9
推荐指数
3
解决办法
9246
查看次数

稀疏酉矩阵的最佳C++矩阵库

我正在寻找一个好的(在最好的情况下积极维护)C++矩阵库.因此它应该是模板化的,因为我想使用复数的有理数作为数字类型.我正在处理的矩阵主要是稀疏和单一的.

你能否建议图书馆,并给出一个小解释,为什么要使用它们,因为我知道如何找到它们,但我无法真正决定什么适合我,因为我错过了它们的经验.

编辑:

我正在处理的主要操作是矩阵乘法,带矢量kronecker乘积的标量乘法.矩阵的大小是指数级的,我想至少能够处理高达1024x1024个条目的矩阵.

c++ matrix sparse-matrix lapack umfpack

8
推荐指数
1
解决办法
1万
查看次数

未找到“umfpack.h”,但它位于 /opt/local/include/ 中

我正在尝试在 OSX 10.8 上编译一个名为 hiQlab 的程序

g++ -g -O2 -I`echo /Users/.../Documents/hiQlab/hiqlab-2006-07-20/tools/`/lua/include -I`echo /Users/.../Documents/hiQlab/hiqlab-2006-07-20/tools/`/tolua++/include -c cscmatrix.cc
cscmatrix.cc:13:12: fatal error: 'umfpack.h' file not found

#include "umfpack.h"
Run Code Online (Sandbox Code Playgroud)

但我刚刚通过 macports 安装了 SuiteSparse,其中包括 umfpack,并且umfpack.h实际上存在于默认目录中/opt/local/include/

我需要添加路径什么的吗?


好吧,经过更多搜索后,我找到了答案——我没有将 macports 路径添加到我的搜索路径中

多么愚蠢=p,由于我在 8 小时内无法回答自己的问题,所以我将在这里编辑

vi ~/.profile

export PATH=/opt/local/bin:/opt/local/sbin:$PATH
export MANPATH=/opt/local/share/man:$MANPATH
export C_INCLUDE_PATH=/opt/local/include
export CPLUS_INCLUDE_PATH=/opt/local/include
export LIBRARY_PATH=/opt/local/lib
alias gcc="gcc -I/opt/local/include -L/opt/local/lib"
alias g++="g++ -I/opt/local/include -L/opt/local/lib"
Run Code Online (Sandbox Code Playgroud)

macos umfpack

5
推荐指数
0
解决办法
2140
查看次数

UMFPACK和BOOST的uBLAS稀疏矩阵

我在数字代码中使用Boost的uBLAS,并且有一个"重"解算器:

http://www.crystalclearsoftware.com/cgi-bin/boost_wiki/wiki.pl?LU_Matrix_Inversion

代码工作得很好,然而,它很慢.经过一些研究,我找到了UMFPACK,它是一个稀疏矩阵求解器(除此之外).我的代码生成大型稀疏矩阵,我需要非常频繁地反转(更正确地解决,逆矩阵的值是无关紧要的),因此UMFPACk和BOOST的Sparse_Matrix类似乎是一个幸福的婚姻.

UMFPACK请求由三个向量指定的稀疏矩阵:条目计数,行索引和条目.(见例).

我的问题归结为,我可以从BOOST的Sparse Matrix类中有效地获得这三个向量吗?

c++ boost numerical linear-algebra umfpack

4
推荐指数
1
解决办法
3883
查看次数