简要说明:
是否有一种有效的方法来制作一个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 ++重新编写我的所有代码。谢谢!