gpt4 book ai didi

python - 将 stdint 与 swig 和 numpy.i 一起使用

转载 作者:太空狗 更新时间:2023-10-29 23:00:11 24 4
gpt4 key购买 nike

我正在开发一个模块,用于在基于 swig 的 Python 代码中使用 c inline。为此,我想让 numpy 数组可以在 C 中访问。到目前为止,我使用的是 unsigned short 这样的 C 类型,但我想使用 stdint.h 中的 uint16_t 这样的类型来保存我的模块的任何编译器相遇。

不幸的是,当使用 stdint.h 类型时,c++ 函数没有被正确包装。给出的错误是:_setc() 正好接受 2 个参数(给定 1 个)。这意味着,该函数未包装为接受 numpy 数组。当我使用例如无符号短

关于如何将 swig 映射 numpy 数组转换为 stdint-types,您有什么想法吗?

interface.i 不工作:

/* interface.i */
extern int __g();
%}
%include "stdint.i"
%include "numpy.i"

%init %{
import_array();
%}
%apply (uint16_t* INPLACE_ARRAY3, int DIM1) {(uint16_t* seq, int n1)};
extern int __g();

c++ 函数不工作:

#include "Python.h"
#include <stdio.h>
#include <stdint.h>
extern uint16_t* c;
extern int Dc;
extern int Nc[4];
void _setc(uint16_t *seq, int n1, int n2, int n3)
{
c = seq;
Nc[0] = n1;
Nc[1] = n2;
Nc[2] = n3;
}

interface.i 工作:

/* interface.i */
extern int __g();
%}
%include "stdint.i"
%include "numpy.i"

%init %{
import_array();
%}
%apply (unsigned short* INPLACE_ARRAY3, int DIM1) {(unsigned short* seq, int n1)};
extern int __g();

c++ 函数工作:

#include "Python.h"
#include <stdio.h>
#include <stdint.h>
extern unsigned short* c;
extern int Dc;
extern int Nc[4];
void _setc(unsigned short *seq, int n1, int n2, int n3)
{
c = seq;
Nc[0] = n1;
Nc[1] = n2;
Nc[2] = n3;
}

最佳答案

哈哈,我放弃并发布这个问题后几分钟就找到了一些“解决方案”。

我编辑了 numpy.i 以适合我的原因:我在第 3044 行中用 stdint.h 类型替换了旧的 C 类型:

[..]
/* Concrete instances of the %numpy_typemaps() macro: Each invocation
* below applies all of the typemaps above to the specified data type.
*/
%numpy_typemaps(int8_t , NPY_BYTE , int)
%numpy_typemaps(uint8_t , NPY_UBYTE , int)
%numpy_typemaps(int16_t , NPY_SHORT , int)
%numpy_typemaps(uint16_t , NPY_USHORT , int)
%numpy_typemaps(int32_t , NPY_INT , int)
%numpy_typemaps(uint32_t , NPY_UINT , int)
%numpy_typemaps(long , NPY_LONG , int)
%numpy_typemaps(unsigned long , NPY_ULONG , int)
%numpy_typemaps(int64_t , NPY_LONGLONG , int)
%numpy_typemaps(uint64_t, NPY_ULONGLONG, int)
%numpy_typemaps(float , NPY_FLOAT , int)
%numpy_typemaps(double , NPY_DOUBLE , int)
[..]

我想知道是否有人有比编辑 numpy.i

更好的主意

干杯乔臣

关于python - 将 stdint 与 swig 和 numpy.i 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34315791/

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