我知道以下代码可用于将数据类型为
double
的特征矩阵的数据写入二进制文件。
template<class T>
void WriteEigenMatrix(const Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic>& m, const char* fileName)
{
std::ofstream outFile(fileName, std::ios_base::out | std::ios_base::binary);
outFile.write(m.data(), m.rows()*m.cols());
outFile.close();`
}
如何概括此函数以接受其他特征数据类型(如
Eigen::Vector
和 Eigen::Array
)作为输入?Eigen::EigenBase
,我知道该函数将接受所有此类数据类型。然而,问题是我不能再使用m.data()
,因为它没有在基类中定义。如果您只想允许“密集”对象,您可以按如下方式操作:
template<class Derived>
void WriteEigen(const Eigen::DenseBase<Derived>& dense, const char* fileName) {
std::ofstream outFile(fileName, std::ios_base::out | std::ios_base::binary);
outFile.write(reinterpret_cast<const char*>(dense.derived().data()), dense.rows() * dense.cols());
outFile.close();
}
所有稠密矩阵(包括向量和数组)都继承自
DenseBase
,在derived
上调用DenseBase
将返回具体的矩阵类型。
或使用您喜欢的任何底座。