问题标签 [pep3118]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 写入新的 Python 缓冲区接口
我已经在此处概述的 C++ 中实现了新的 python 缓冲区接口:
https://docs.python.org/2/c-api/buffer.html
我已经实现了我的 Py_buffer 结构并填写了它:
我正在用 Python 创建我的 Python 缓冲区类并将其交给 C++。我得到了一个 pyObject 和我的 Py_Buffer。所以现在我的问题是,我应该如何在 C++ 中编写和调整这个 pyBuffer 的大小?我可以直接访问指针和大小。但是,如果它是一个新创建的缓冲区,我如何告诉它我需要多少空间?似乎没有任何类型的调整大小功能可供我调用。
我可以用:int result = PyBuffer_FromContiguous(&m_view, const_cast<void*>(data), pySize, 'A');
将数据添加到我的缓冲区。但是我的缓冲区必须已经具有正确的大小,否则它不会写入。我不认为这是使用它的正确方法。
Cython 不是一种选择。
python - 将 PIL 图像转换为 skimage?
我的代码中加载了一个图像(非常长且不必要,不会在此处发布),我需要使用 skimage 来检测图像中的斑点。但是由于某种原因,我使用的所有图像和尝试都不起作用。
PIL 在上面的代码中修改了图像,使我试图找到的对象只有白色(255、255、255),而所有其他像素都是黑色的。这段代码只需要识别这些的位置。我尝试了许多不同的方法来让它工作(将它们转换为 numpy 数组,而不是将它们转换为 numpy 数组等。)
我遵循这些说明:http ://scikit-image.org/docs/dev/auto_examples/plot_blob.html是基础知识,但它并不是真正的教程,而是一个示例。
我认为 rgb2gray 函数存在问题,因为它只返回 0,而 print(numpy.array(img)) 返回的值介于 0 和 1 之间,这表明信息丢失是在调用 rgb2gray 时。
这是似乎有问题的代码:
我怎样才能解决这个问题?
编辑:
以下是每个图像、数组和列表的打印内容:
python - 在 Python 中将二进制数据从文件加载到缓冲区中
我有一组 640x480 的图像。我正在通过 Matlab 将这些图像转换为二进制文件格式……现在,我需要将每个二进制文件加载到 Python 中的缓冲区中,然后从该缓冲区中读取数据。任何人都可以帮助我如何做到这一点,或建议一个链接?-谢谢。
python - Python C-API:从 C 函数填充 Py_buffer
我很难弄清楚如何将大字节数据数组从 C 传递到任意 Python3 函数。作为参考,以下是有关该主题的一些文档链接:
https://docs.python.org/3.5/extending/embedding.html
文档中的大多数信息似乎都假设我正在将数据从 Python 传递到 C。我需要做相反的事情。我找到了对 API 函数的引用PyBuffer_FromContiguous
——但它没有记录在任何地方(我可以找到)。函数原型在这里:
基本上我有两个问题:
- 这是构造
Py_buffer
对象的正确方法吗?这甚至是正确的方法吗? - 一旦
Py_buffer
构造了,我如何将Py_buffer
与PyObject
可以设置为输入元组/参数的 a 关联起来以调用 python 函数?
这是我正在尝试的代码示例(已更新以包含data_s
typedef):
......我真的很感激在这些问题上的任何线索。
python - Cython - 动态 2D C++Array 的 Memoryview
目标:使用 Cython 从 2D C++ 字符数组中获取 Memoryview。
一点背景:
我有一个本地 C++ 库,它生成一些数据并通过 a 返回char**
到 Cython 世界。数组在库中初始化和操作如下:
所以我们基本上得到了一个嵌套子数组的数组。
旁注:
- 每行具有相同的列数
- 行可以共享内存,即指向相同的 row_data
目标是将此数组与 memoryview 一起使用,最好不要进行昂贵的内存复制。
第一种方法(不工作):
使用 Cython 数组和内存视图:
这是应该使用生成的数据的 .pyx 文件
这实际上编译得很好并且运行没有崩溃,但结果并不完全符合我的预期。如果我打印出 NumPy 数组的值,我会得到:
事实证明,第一行被正确映射,但其他行看起来更像是未初始化的内存。因此,可能与char**
2D 内存视图的内存布局和默认模式不匹配。
编辑#1:我从另一个问题中学到的是内置的 cython 数组不支持间接内存布局,所以我必须为它创建一个 cython-wrapper 来unsigned char**
公开缓冲区协议
python-3.x - 解析 PEP 3118 缓冲区协议格式字符串
我对使用缓冲区协议在 python、numpy 和 cython 之间传递二进制数据感兴趣。查看PEP 3118,似乎对 struct string-syntax 进行了一些添加,增加了对命名字段和嵌套结构等有用功能的支持。
但是,似乎在所有这三个地方对所有缓冲区语法的支持都是有限的。例如,假设我有以下 cython 结构:
尝试提取符合 PEP-3118 的字节字符串,如下所示
失败并显示此错误消息:
Invalid base type for memoryview slice: ImageComp
因为如果它们包含指针,则无法创建类型化的内存视图。
同样,view.array
使用我的自定义字符串或使用 pythonstruct
模块的calcsize
函数创建一个类似的警告struct.error: bad char in struct format
。
我可以按照此处所述手动创建和填充Py_buffer
对象,但尝试将其转换为具有产量的 numpy 数组。np.asarray
ValueError: 'T{L:width:L:height:&B:pixels:}' is not a valid PEP 3118 buffer format string
考虑到所有这些,我有以下问题:
- 标准 python 库中是否有任何模块可以利用完整
PEP 3118
规范? - 这种结构格式语法是否在任何地方正式定义(即使用 PEG 语法)?
- 如果 cython 或 numpy 包含指针,有没有办法强制它自动生成有效的格式字符串?