具有复向量的犰狳稀疏实矩阵乘法

Armadillo sparse real matrix multiplication with complex vector

本文关键字:向量      更新时间:2023-10-16

我正试图将稀疏实矩阵与复向量相乘,但程序不编译。如果我把向量变成实数或者矩阵变成稠密矩阵,那么所有的都通过了。示例代码为:

#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<<"ntMultiplying real matrix with complex vector:"<<std::endl;
  mat R = randu<mat>(n,n);
  R*v; // -------------> COMPILES
 std::cout<<"ntMultiplying 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版本

我在将两个不同数字类型的稀疏矩阵相乘时遇到了同样的问题(参见这里)。目前看来,稀疏对象与任何其他非标量类型(无论是稀疏的还是密集的)的乘法只适用于相等的数字类型。我希望他们能尽快实现!

您可以在502454行查看operator_times.hpp:如果两个具有不同模板参数的对象相乘,enable_if2模板参数中的布尔表达式将计算为false,从而从operator*过载的候选列表中消除该模板。