以下代码:

#include <iostream>
#include <armadillo>

using namespace std;
using namespace arma;

int main()
{
        sp_mat A = speye<sp_mat>(5,5);
        rowvec s1 = max(A,0);

        return 0;
}

给出以下编译时错误:
benchmark.cpp: In function ‘int main()’:
benchmark.cpp:11:21: error: conversion from ‘arma::enable_if2<true, const arma::SpOp<arma::SpMat<double>, arma::spop_max> >::result {aka const arma::SpOp<arma::SpMat<double>, arma::spop_max>}’ to non-scalar type ‘arma::rowvec {aka arma::Row<double>}’ requested
  rowvec s1 = max(A,0);
                     ^
make: *** [all] Error 1

对于稀疏矩阵的min,sum和其他运算相同,而对于密集矩阵则非常适用。
我在这里做错什么了吗?

最佳答案

在稀疏矩阵上的max运算将导致稀疏矩阵。

将您的代码更改为:

sp_mat A = speye<sp_mat>(5,5);
sp_mat s1 = max(A,0);

关于c++ - 在C++的 Armadillo 中,稀疏矩阵上的sum(<sp_mat>,<dim>)不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26204016/

10-12 20:39