Eigen3:写出稀疏矩阵

问题描述 投票:0回答:1

我使用以下代码在Eigen3中创建了一个稀疏矩阵:

#include <eigen3/Eigen/Sparse>
#include <eigen3/unsupported/Eigen/src/SparseExtra/MarketIO.h>
#include <vector>

using SpMatrix = Eigen::SparseMatrix<double>;
using Eigen::SparseMatrix;
using S = Eigen::Triplet<double>;
using namespace std;
using AdjacenyMatrix = SpMatrix;

int main() {

    vector <S> nonzero_compenents;
    AdjacenyMatrix am(10, 10);
    nonzero_compenents.push_back(move(S(1, 1, 1.0)));

    am.setFromTriplets(nonzero_compenents.begin(), nonzero_compenents.end());

    bool s = saveMarket(am, "/home/morris/Schreibtisch/sparse_matrices");

    return 0;

}

不幸的是,代码无法编译。 qazxsw poi似乎有些不对劲:

MarketIO.h

... 有什么建议?

c++ c++11 eigen eigen3
1个回答
0
投票

正如@ggael所说:不要包含单个文件,而是包含它们的模块/目录。请注意,在这种情况下,您还需要从路径中删除In file included from /home/morris/sparse/main.cpp:2:0: /usr/include/eigen3/unsupported/Eigen/src/SparseExtra/MarketIO.h: In function ‘void Eigen::internal::PutMatrixElt(Scalar, int, int, std::ofstream&)’: /usr/include/eigen3/unsupported/Eigen/src/SparseExtra/MarketIO.h:87:9: error: no match for ‘operator<<’ (operand types are ‘std::ofstream {aka std::basic_ofstream<char>}’ and ‘int’) out << row << " "<< col << " " << value << "\n"; ^

先前:

src

现在:

#include <eigen3/unsupported/Eigen/src/SparseExtra/MarketIO.h>

完整代码:

#include <eigen3/unsupported/Eigen/SparseExtra>

现在它应该使用例如编译

#include <eigen3/Eigen/Sparse>
#include <eigen3/unsupported/Eigen/SparseExtra>
#include <vector>

using SpMatrix = Eigen::SparseMatrix<double>;
using Eigen::SparseMatrix;
using S = Eigen::Triplet<double>;
using namespace std;
using AdjacenyMatrix = SpMatrix;

int main() {

    vector <S> nonzero_compenents;
    AdjacenyMatrix am(10, 10);
    nonzero_compenents.push_back(move(S(1, 1, 1.0)));

    am.setFromTriplets(nonzero_compenents.begin(), nonzero_compenents.end());

    bool s = saveMarket(am, "/home/morris/Schreibtisch/sparse_matrices");

    return 0;

}
© www.soinside.com 2019 - 2024. All rights reserved.