C++ 如何使用指针用数据填充xtensor数组
我正在尝试从C++ 如何使用指针用数据填充xtensor数组,c++,caffe,xtensor,C++,Caffe,Xtensor,我正在尝试从caffe库中的blob数据创建xtensor数组。使用caffe中的函数mutable\u cpu\u data()返回数据指针,例如通过float*data=output->mutable\u cpu\u data()。对于xtensor,这可能吗?如果是,请举例说明。我发现使用OpenCVMat的示例,但是xtensor非常类似于numpy,这使得对类似矩阵的数据进行操作更加容易。您可以这样做,但您需要数据的大小 试试下面说的 float* data = output->
caffe
库中的blob数据创建xtensor
数组。使用caffe
中的函数mutable\u cpu\u data()
返回数据指针,例如通过float*data=output->mutable\u cpu\u data()代码>。对于xtensor
,这可能吗?如果是,请举例说明。我发现使用OpenCVMat
的示例,但是xtensor
非常类似于numpy
,这使得对类似矩阵的数据进行操作更加容易。您可以这样做,但您需要数据的大小
试试下面说的
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);
float*data=output->mutable_cpu_data();
//将数据转换为浮点向量
//我假设您的数组的大小可能是4。
//将4替换为预期大小的阵列。
std::矢量fData(数据,数据+4);
//初始化XARRAY
xarray a(fData);
您可以使用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);
float*data=output->mutable_cpu_data();
size\u t size=数据的大小;
//例如,对于一维张量
xt::static_shape sh={size_of_data};
//自适应参数包括:
//-要调整的1D缓冲区
//-缓冲区的大小
//-所有权标志(如果适配器在删除时销毁您的缓冲区,请参见此处
//(可能不会)
//-形状
自动a=xt::adapt(数据、数据的大小、假sh);
与Naidu提供的解决方案相比,它的优势在于不复制数据缓冲区,而是“就地”调整