как заполнить массив xtensor данными, используя указатель - PullRequest
0 голосов
/ 10 октября 2018

Я пытаюсь создать массив xtensor из данных BLOB-объектов в библиотеке caffe.Указатель на данные возвращается с помощью функции mutable_cpu_data() в caffe, например, float* data = output->mutable_cpu_data();.Возможно ли это с xtensor?Если да, не могли бы вы привести пример.Я нашел примеры, в которых используется OpenCV Mat, но xtensor очень похож на numpy, что значительно упрощает работу с данными, подобными матрице.

Ответы [ 2 ]

0 голосов
/ 17 октября 2018

Вы можете использовать функцию xt :: adapt из xadapt.hpp, но вам нужно указать форму:

float* data = output->mutable_cpu_data();
size_t size = size_of_data;
// For a 1D tensor for instance
xt::static_shape<std::size_t, 1> sh = { size_of_data};
// Parameters of adapt are:
// - the 1D buffer to adapt
// - the size of the buffer
// - the ownership flag (should the adaptor destroy your buffer upon deletion, here
//   probably not)
// - the shape
auto a = xt::adapt(data, size_of_data, false sh);

Преимущество по сравнению с решением, предоставленным Naidu, заключается в том, что вы не копируетебуфер данных, он адаптирован "на месте".

0 голосов
/ 10 октября 2018

Вы можете сделать это, но вам нужен размер ваших данных ....

Попробуйте, как сказано ниже.

float* data = output->mutable_cpu_data();

//CONVERT YOUR DATA TO FLOAT VECTOR
//I assume the size of your array could be 4.
//Replace 4 with intended size of array.
std::vector<float> fData(data, data+4); 

//INITIALIZE XARRAY
xt::xarray<float> a(fData);
...