如何使用指针用数据填充xtensor数组

时间:2018-10-10 12:29:52

标签: c++ caffe xtensor

我正在尝试根据xtensor库中的Blob数据创建一个caffe数组。使用mutable_cpu_data()中的函数caffe返回数据指针,例如float* data = output->mutable_cpu_data();xtensor有可能吗?如果是,请提供一个例子。我发现使用OpenCV Mat的示例,但是xtensornumpy很像,{{1}}使得像数据这样的矩阵上的操作更加容易。

2 个答案:

答案 0 :(得分:0)

您可以这样做,但是您需要数据的大小。...

请按照以下说明进行操作。

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

答案 1 :(得分:0)

您可以使用xadapt.hpp中的xt :: adapt函数,但需要提供形状:

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提供的解决方案相比,优点是您无需复制数据缓冲区,而是“就地”进行了修改。