как заполнить массив xtensor данными, используя указатель

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

2

Решение

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

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

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);
0

Другие решения

Вы можете использовать функцию 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

По вопросам рекламы [email protected]