Tensor与nc::NdArray的互转
转换是通过vector来实现的,先将Tensor转换成std::vector,再转换成NdArray。
#include "torch/torch.h"
#include <NumCpp.hpp>
#include <qDebug>
using namespace std;
int main()
{
//初始化一个3*3的张量
auto t = torch::ones({3,3},at::kDouble);
//将tensor转换成vector,t.numel返回的是张量元素总数
std::vector<double> vec(t.data_ptr<double>(),
t.data_ptr<double>()+t.numel());
//再转换成nd
nc::NdArray<double> nd = nc::asarray(vec).reshape({3,3});
//ndarray转换成张量
auto options = torch::TensorOptions().dtype(torch::kDouble);
auto data = nd.data();
//clone是深拷贝,防止原数据的改变影响现在的数据
torch::Tensor _temp_tensor = torch::from_blob(data,{nd.numRows(),nd.numCols()},options).clone();
}