python - 用于多个不同类型数组的 Numpy.i 类型映射
问题描述
我有一个 C 函数,除其他参数外,它还包含 3 个不同类型的数组:
void create_signal(double ztab[], ..., int *pdata, ..., char ranging[], ...);
我想在使用 SWIG 的 Python 模块中使用这个函数。
我已经想出了如何使用 C 函数来接收带有numpy.i类型映射的数组:
%apply (double* INPLACE_ARRAY1, int DIM1) {(double xtab[], int length)}
例如,
甚至2个相同类型的数组:
apply (double* INPLACE_ARRAY1, int DIM1) {(double xtab[], int length_x), (double ytab[], int length_y)}
但我不知道如果数组是不同的类型(在我的情况下int
,,,double
和char
),或者我是否应该重写我自己的类型映射,是否可以这样做。
谢谢你的帮助 !
解决方案
无论如何,这里有一个例子
测试.h
#pragma once
void multipleInputs(const float* data, const int nData,
const float* pos, const int nPositions, const int nDim);
测试.cpp
#include "test.h"
#include <cstdio>
void multipleInputs(const float* data, const int nData,
const float* pos, const int nPositions, const int nDim)
{
if (nData > 0) {
printf("%d'th element is: %f\n", (nData-1), data[nData-1]);
}
if ((nDim > 0) && (nPositions > 0)){
printf("%d'th dimension of the %d'th element is: %f\n",
(nDim-1), (nPositions-1), data[nData-1]);
}
}
测试.i
%module example
%{
#define SWIG_FILE_WITH_INIT
#include "test.h"
%}
%include "numpy.i"
%init {
import_array();
}
%apply (float* IN_ARRAY1, int DIM1) \
{(const float* data, const int nData)}
%apply (float* IN_ARRAY2, int DIM1, int DIM2) \
{(const float* pos, const int nPositions, const int nDim)};
%include "test.h"
安装程序.py
import numpy
from setuptools import setup, Extension
setup(name="example",
py_modules=["example"],
ext_modules=[Extension("_example",
["test.i","test.cpp"],
include_dirs = [numpy.get_include(), '.'],
swig_opts=['-c++', '-I.'],
)]
)
测试.py
import example
example.multipleInputs(np.ones((10),dtype=np.float32),
np.ones((10,10),dtype=np.float32))
推荐阅读
- javascript - 反应:刷新页面时表单很干净
- regex - 如何从 HTML 中提取 youtube id?
- joomla - Joomla 用户表
- javascript - 如何根据匹配的名称值更新 Firestore 中的简单对象值?
- c# - 在传递单个字符串参数时从 MVC 5 控制器调用 Web API Post 方法
- r - R按位置将字符串列分成两列
- django - 使用 Django 在我的 Heroku 应用程序中收集静态文件的问题
- javascript - CSS:在移动尺寸上的链接文本旁边显示图标
- python - 如何在 DataFrame pandas 中保存 groupby 对象
- python - 将数据分配给多索引数据帧的切片