Convert Torch Tensor to flattened C++ array

How do I convert a Torch tensor to a C++ array without looping over all the dimensions ( I can do this, but is terribly slow) and std::memcpy has undefined behavior.

Using memcpy like this.

std::array<float, 327600> output_data;
at::Tensor output = *from some instructions*
1 Like

I didn’t get the same undefine behavior using g++. But I guess

Maybe you missed the usage of template version of data_ptr:


The output.data_ptr() returns a void pointer, and sometimes memcpy btwn pointers with different types has undefined behavior

Thanks for the reply.

The problem was the non-contiguous memory distribution for the tensor. So the raw memory copy failed. Using the contiguous method on the tensor and returning the data pointer worked


Could you help me to understand in details ?

I use these code, but it do not work:

result is a torch::Tensor object, it is on cpu.

result = result.contiguous();

Like python, torch::Tensor has the view method to
You could do the following -


auto tensor = torch::rand({1, 2, 3 ,5});
tensor = tensor.view(tensor.size(0), -1); //Here the shape of the data is batch, num_tensors
tensor = tensor.contiguous();
std::vector<float> vector(tensor.data_ptr<float>(), tensor.data_ptr<float>()+tensor.numel());