有一个 Eigen::MatrixBase & 数据,有什么办法可以得到它是浮点矩阵还是双精度矩阵?我需要创建一个与 MatrixBase 大小和类型相同的新复杂矩阵。
如果是 MatrixXf,那么我需要创建 MatrixXcf,如果是 MatrixXd,我需要 MatrixXcD。?
template <typename A>
int dowork(const Eigen::MatrixBase<A>& data)
这很简单,只需使用 A::RealScalar typedef 来构建您的复杂类型:
template <typename A>
int dowork(const Eigen::MatrixBase<A>& data) {
typedef Matrix<std::complex<typename A::RealScalar, Dynamic, Dynamic> MatCplx;
...
我不是 100% 确定我理解所提出的问题,但我认为您要求在满足某些条件后分配另一个相同时间类型的矩阵?您是否希望这个新矩阵不允许与类型不匹配的数据类型?
如果没有,因为您使用的是模板类,所以您有很多自由,可以只使用通用模板数据类型。还考虑使用矢量格式表示矩阵以方便使用。甚至可能像这样的稀疏格式的东西
// Local variables used.
int a = 0;
int b = 0;
int endN, endM;
// Iterates through matrix checking when last matrix value is reached for end point.
while (endN != sizeN && endM != sizeM) {
if (a == sizeN) {
b++;
a = 0;
endM = b;
} else {
if (Matrix[a][b] != 0) {
// Stores non-zero matrix values in queue SpareseFormat.
SparseFormat.push(a);
SparseFormat.push(b);
SparseFormat.push(Matrix[a][b]);
}
endN = a;
a++;
}
}
对不起,如果我完全不明白你的问题。这是一个漫长的夜晚:P