我正在尝试将稀疏的实矩阵与复杂的 vector 相乘,但是程序无法编译。如果我将 vector 更改为实数,或者将矩阵更改为稠密,那么一切都会进行。示例代码是:

#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。

最佳答案

将两个不同数字类型的稀疏矩阵相乘也遇到了相同的问题(请参阅here)。似乎将稀疏对象与任何其他非标量类型(稀疏或密集)相乘目前仅适用于相等的数值类型。我希望他们能尽快实现!

您可以通过在operator_times.hpp502行中查看454进行检查:如果两个具有不同模板参数的对象相乘,则enable_if2模板参数中的 bool(boolean) 表达式将求值为false,因此从operator*重载候选列表中删除了该模板。

关于c++ - Armadillo 稀疏实矩阵乘法与复 vector ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30465731/

10-10 14:23