创建具有特定格式的PyMemoryView

时间:2019-11-22 08:38:26

标签: python-c-api

我正在用C暴露一组数据中的PyMemoryView,如下所示:

PyMemoryView_FromMemory((char *)ibuf->rect, pixels * sizeof(uint), PyBUF_WRITE);

但是,该数据是浮点数据,因此尝试执行此操作:

mv = get_my_memory_view()
mv[0] = 3.141

产生以下错误:

  

TypeError:memoryview:格式“ B”的无效类型

这当然是因为memoryview假定基础数据是字节数据,而不是浮点数。我如何确保从模块返回的memoryview具有浮点说明符?

1 个答案:

答案 0 :(得分:1)

最简单的方法可能是使用the cast method of the memoryview获取具有正确格式的新memoryview。没有直接的C-API方法可以执行此操作,因此只需像其他任何Python方法一样调用它即可:

mview_double = PyObject_CallMethod(mview_bytes, "cast", "s", "d");

这假设double数据-如果它是float数据,则应更改"d"


在最初对PyMemoryView_FromMemory的调用中,我认为pixels * sizeof(uint)是错误的,因为您已经告诉我们数据类型是浮点类型。也许pixels*sizeof(ibuf->rect[0])

相关问题