我试图将稀疏实矩阵与复数向量相乘,但程序无法编译。如果我将矢量更改为实数或将矩阵更改为密集,那么一切都会通过。示例代码为:
#define ARMA_64BIT_WORD
#include <armadillo>
#include <iostream>
#include <stdio.h>
#include <math.h>
using namespace arma;
int main(){
size_t n(5);
vec vR(randu<vec>(n)), vI(randu<vec>(n)); //Create random complex vector 'v'
cx_vec v(vR, vI);
std::cout<<"\n\tMultiplying real matrix with complex vector:"<<std::endl;
mat R = randu<mat>(n,n);
R*v; // -------------> COMPILES
std::cout<<"\n\tMultiplying real sparse matrix with complex vector:"<<std::endl;
sp_mat Rs = sprandu<sp_mat>(n,n,0.2);
Rs*v; // ------------> DOES NOT COMPILE
return 0;
}
有关解决方案的任何建议吗?我使用的是Armadillo版本5.200.1。
答案 0 :(得分:2)
我在将两个不同数值类型的稀疏矩阵相乘时遇到了同样的问题(参见here)。似乎将稀疏对象与任何其他非标量类型(稀疏或密集)相乘仅适用于现在相同的数字类型。我希望他们能尽快实现!
您可以通过在operator_times.hpp
行和502
处查看454
进行检查:enable_if2
模板参数中的布尔表达式将评估为false
将具有不同模板参数的对象相乘,从而从operator*
重载的候选列表中删除该模板。