首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >LibTorch C++与Eigen之间的数据传输

LibTorch C++与Eigen之间的数据传输
EN

Stack Overflow用户
提问于 2019-08-24 00:45:54
回答 1查看 616关注 0票数 1

LibTorch C++和Eigen之间的数据传输(问题和帮助)

大家好,我正在为Eigen线性代数库开发一个数据传输工具,你可以在这里看到:https://github.com/andrewssobral/dtt (考虑二维数组或矩阵),我想知道你是否可以帮助我在LibTorch和C++之间进行数据传输的以下代码:

代码语言:javascript
运行
复制
std::cout << "Testing LibTorch to Eigen:" << std::endl;
// LibTorch
torch::Device device(torch::cuda::is_available() ? torch::kCUDA : torch::kCPU);
torch::Tensor T = torch::rand({3, 3});
std::cout << "LibTorch:" << std::endl;
std::cout << T << std::endl;
// Eigen
float* data = T.data_ptr<float>();
Eigen::Map<Eigen::MatrixXf> E(data, T.size(0), T.size(1));
std::cout << "EigenMat:\n" << E << std::endl;
// re-check after changes
E(0,0) = 0;
std::cout << "EigenMat:\n" << E << std::endl;
std::cout << "LibTorch:" << std::endl;
std::cout << T << std::endl;

这是代码的输出:

代码语言:javascript
运行
复制
--------------------------------------------------
Testing LibTorch to Eigen:

LibTorch:
 0.6232  0.5574  0.6925
 0.7996  0.9860  0.1471
 0.4431  0.5914  0.8361
[ Variable[CPUFloatType]{3,3} ]

EigenMat (after data transfer):
0.6232 0.7996 0.4431
0.5574  0.986 0.5914
0.6925 0.1471 0.8361

# Modifying EigenMat, set element at (0,0) = 0
EigenMat:
     0 0.7996 0.4431
0.5574  0.986 0.5914
0.6925 0.1471 0.8361

# Now, the LibTorch matrix was also modified (OK), but the rows and columns were switched.
LibTorch:
 0.0000  0.5574  0.6925
 0.7996  0.9860  0.1471
 0.4431  0.5914  0.8361
[ Variable[CPUFloatType]{3,3} ]

有人知道发生了什么吗?有更好的方法吗?

我也需要为Armadillo,ArrayFire和OpenCV (cv::Mat)做同样的事情。提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-24 17:12:48

切换行和列的原因是LibTorch (显然)使用行主存储,而Eigen默认使用列主存储。我不知道你是否可以改变LibTorch的行为,但是你也可以使用行主存储,如下所示:

代码语言:javascript
运行
复制
typedef Eigen::Matrix<float, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor> MatrixXf_rm; // same as MatrixXf, but with row-major memory layout

然后像这样使用它:

代码语言:javascript
运行
复制
Eigen::Map<MatrixXf_rm> E(data, T.size(0), T.size(1));
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57630252

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档