如何将Eigen矩阵转换为Torch张量?转换结果异常求助
解决Eigen矩阵转Libtorch张量值异常的问题
问题出在数据类型不匹配:
- 你的Eigen矩阵是
double类型(8字节/元素) torch::from_blob默认创建float类型张量(4字节/元素)
内存解析时按float的字节数读取double的数据,自然会出现乱码。
两种解决办法:
方法一:显式指定张量的类型为Double
修改from_blob的调用,加上类型参数,让Libtorch按double类型解析内存:
std::vector<int64_t> dims = {E.rows(), E.cols()}; // 显式指定kDouble类型 torch::Tensor T = torch::from_blob(E.data(), dims, torch::kDouble).clone();
如果最终需要float类型的张量,在clone后转类型即可:
torch::Tensor T = torch::from_blob(E.data(), dims, torch::kDouble).clone().to(torch::kFloat);
方法二:将Eigen矩阵改为float类型
直接让Eigen存储float数据,和Libtorch默认类型对齐:
// 把double改成float Eigen::Matrix<float, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor> E(1,3);
之后原有的from_blob调用就能正常解析出正确的值。
测试后两种方法都能得到预期输出:
E 1 2 3 T 1 2 3 [ CPUFloatType{1,3} ]
内容的提问来源于stack exchange,提问作者mitsu
相关产品推荐
相关产品推荐

