加载稀疏矩阵Armadillo C ++

时间:2017-06-30 14:08:47

标签: c++ matrix sparse-matrix armadillo

我有一点奇怪的问题。我通常使用CLion IDE来编译和运行代码,但我想利用分析器来尝试优化我的软件,而CLion不包含分析器扩展。所以我需要在命令行编译和运行。

好的,没有问题,但出于某些原因,当我这样做时,我在加载以arma_binary形式保存的稀疏矩阵时出错(Armadillo文档声明这是稀疏矩阵唯一可能的文件格式)。

以下是保存为main.cpp的示例脚本:

#include <iostream>
#include <armadillo>


using namespace std;
using namespace arma;

void DenseMult (mat& I, mat& B);
void SparseMult (sp_mat& I, mat& B);

int main() {

    mat Int; Int.load("intMatDense.mat");
    cout << Int.n_cols << endl;

    sp_mat IntSp; IntSp.load("intMatSparse.mat", arma_binary);
    cout << IntSp.n_cols << endl;

    mat B; B.load("biomassMat.mat");

    DenseMult(Int, B);

    SparseMult(IntSp, B);

    return 0;
}

void DenseMult (mat& I, mat& B) {
    I * B;
}

void SparseMult (sp_mat& I, mat& B) {
    I * B;
}

在CLion中构建和运行时,它给出了以下输出:

/home/jack/CLionProjects/Optimization/cmake-build-debug/Optimization
307
307

Process finished with exit code 0

到目前为止一直很好,但是当我这样做时(我认为是)在命令行中也一样:

jack@jack-MacBookPro:~/CLionProjects/Optimization$ g++ main.cpp -o main -O2 -larmadillo
jack@jack-MacBookPro:~/CLionProjects/Optimization$ ./main

我得到以下输出:

307

warning: SpMat::load(): inconsistent data in intMatSparse.mat
0

error: matrix multiplication: incompatible matrix dimensions: 0x0 and 307x3
terminate called after throwing an instance of 'std::logic_error'
  what():  matrix multiplication: incompatible matrix dimensions: 0x0 and 307x3
Aborted (core dumped)

我是否有可能以不同的方式链接到Armadillo库以访问稀疏矩阵功能?

提前致谢。

杰克

0 个答案:

没有答案