C ++指向Numpy数组的指针

时间:2016-07-01 22:52:38

标签: python c++ arrays numpy

简要说明:

是否有一种有效的方法来制作一个numpy数组,在内存中指向数组,它的类型和元素数量?

更详细信息:

我正在使用一个python框架,它有一个object.GetData()命令,它应该返回一个指向该对象的数据(一个35,000 int8的数组)的指针。

我应该能够通过

有效地将这些整数加载到numpy数组中
arr = numpy.frombuffer(object.GetData(),count=35000,dtype="int8")

但这似乎不起作用。我收到错误消息ValueError: buffer is smaller than requested size。改变长度,我可以让它输出一个数组,但通常长度小于20个整数(通常为0或1个整数)。

我相信我可以通过

以十六进制形式访问指向数组开头的指针
hex(id(object.GetData())) 

看起来它给出了地址(例如0x10fd8c670),但我不知道这是否是实际地址。

我在python中比c ++更舒服,但c ++代码中可能存在错误。 GetData的c ++代码是:

const _Tp* GetData() const 
{ 
  // Return a const pointer to the internal data
  return (fData.size() > 0 ) ? &(fData)[0] : NULL; 
}

其中fdata通过以下方式初始化为VecType:

VecType   fData;

现在我可以通过object.At(i)命令访问对象数据的每个元素,其中i是对象的数据数组的索引,但是以这种方式将每个元素加载到numpy数组中非常慢,我正在处理大量数据。作为参考,c ++代码中的At命令执行此操作:

_Tp  At(size_t i) const 
{ 
  return fData.at(i); 
} 

任何帮助将不胜感激。我没有很多关于指针的经验,甚至没有使用python中的指针,但我想在python中解决这个问题,而不是用c ++重新编写我的所有代码。谢谢!

0 个答案:

没有答案