【问题标题】:Create a matrix of c_short_type arrays创建一个 c_short_type 数组矩阵
【发布时间】:2021-05-14 13:32:15
【问题描述】:

我有 <class '__main__.c_short_Array_40000'> 类型的数组,其中包含 totalSamples = 40000 元素。我使用 ctypes 约定 buffer = (ctypes.c_int16 * totalSamples)() 创建它。现在我需要创建几十个这样的数组,所以我需要将它们打包成一个矩阵(比如说 32x40000),其中每个元素的类型都是 <class '__main__.c_short_Array_40000'>。我怎么做?稍后我将遍历该矩阵并将矩阵的每一行提供给ctypes.byref(myMatrixRow) 函数,该函数需要<class '__main__.c_short_Array_40000'> 作为输入。

感谢您的帮助。

【问题讨论】:

    标签: python arrays matrix ctypes


    【解决方案1】:

    继续乘以更多维度:

    buffer = (ctypes.c_int16 * 40000 * 32)()
    

    以上等价于Cint16_t buffer[32][40000];。请注意,尺寸在 Python 中是反向声明的,但您仍然可以像 C 一样访问:

    >>> import ctypes
    >>> buffer = (ctypes.c_int16 * 40000 * 32)()
    >>> buffer
    <__main__.c_short_Array_40000_Array_32 object at 0x00000227681FFBC0>
    >>> buffer[0]
    <__main__.c_short_Array_40000 object at 0x00000227681FFC40>
    >>> buffer[31]
    <__main__.c_short_Array_40000 object at 0x00000227681FFCC0>
    >>> buffer[31][39999]
    0
    

    【讨论】:

    • 我发现在 python 中实现这个很奇怪。如果我创建一个缓冲区:bufferAMax = (ctypes.c_int16 * 40000 * 10)() 我得到&lt;__main__.c_short_Array_40000_Array_10 object at 0xb4d157b0&gt;。但是缓冲区中的每个数组都有相同的地址。例如:bufferAMax[0] 给出&lt;__main__.c_short_Array_40000 object at 0xb4d15940&gt;,而bufferAMax[9] 再次给出&lt;__main__.c_short_Array_40000 object at 0xb4d15940&gt;。我认为这里有问题不是吗?
    • @user2963789 不,ctypes 正在创建代理对象,但您没有将它们分配给变量,它们立即被释放。下一个恰好分配在同一个地址。将引用分配给名称,它们会有所不同
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 2021-01-09
    • 1970-01-01
    • 1970-01-01
    • 2020-03-23
    • 1970-01-01
    • 2023-04-01
    相关资源
    最近更新 更多