gpt4 book ai didi

python - 使用 ctypes 数组作为 numpy 数组时的 PEP 3118 警告

转载 作者:太空狗 更新时间:2023-10-29 18:02:39 25 4
gpt4 key购买 nike

当我尝试将 ctypes 数组用作 numpy 数组时收到以下警告消息:

Python 2.7.1 (r271:86832, Nov 27 2010, 18:30:46) [MSC v.1500 32 bit (Intel)] on
win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import ctypes, numpy
>>> TenByteBuffer = ctypes.c_ubyte * 10
>>> a = TenByteBuffer()
>>> b = numpy.ctypeslib.as_array(a)
C:\Python27\lib\site-packages\numpy\ctypeslib.py:402: RuntimeWarning: Item size
computed from the PEP 3118 buffer format string does not match the actual item s
ize.
return array(obj, copy=False)
>>> b
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=uint8)

不过,代码似乎可以正常工作。忽略此警告是个坏主意吗?

背景:我正在调用一个实时生成数据的 C DLL。我需要向 DLL 传递一系列缓冲区来保存数据。在等待下一个缓冲区填充时,我想用 numpy 处理最新的缓冲区并保存结果。我正在使用上面的代码生成缓冲区,一切似乎都在工作,但我不想掩盖一个重要的问题。

最佳答案

这是 Python 中的一个错误。 ctypes 当前生成无效的 PEP 3118 类型代码,Numpy 注意到: http://bugs.python.org/issue10746 http://bugs.python.org/issue10744

当出现这种不一致时,Numpy 会跳过使用 PEP 3118 缓冲区接口(interface),并回退到旧的(过时的)缓冲区接口(interface)。这应该可以正常工作。

您可以使用 Python 的 warnings 模块使警告静音。但是,该警告可能会影响性能。

您还可以尝试通过将 ctypes 对象包装在 buffer() 中来解决此问题。

关于python - 使用 ctypes 数组作为 numpy 数组时的 PEP 3118 警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4964101/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com