gpt4 book ai didi

python - 如何将 numpy ndarray 转换为 C float *[]

转载 作者:行者123 更新时间:2023-11-28 18:35:38 28 4
gpt4 key购买 nike

我在 C 中有代码,我想在 python 中使用它,我使用 SWIG 来包装 C 代码,并且在我的 python 代码中成功导入了一个 python 模块。

现在我有以下代码:

import flame
import numpy as np

data = np.random.rand(3,2).astype(np.float32, copy=False)
N = 3
M = 2
print data

flameobject = flame.Flame_New()
flame.Flame_SetDataMatrix( flameobject, data, N, M, 0 )

这给出了错误:

TypeError: in method 'Flame_SetDataMatrix', argument 2 of type 'float *[]'

我知道我应该将一个 float 组指针传递给该方法,但我如何才能将我的 Numpy 多维数组转换为正确的类型?

最佳答案

有关于此的 SciPy 文档:How to pass numpy arrays to C code via SWIG (and vice versa)。看看here .

基本上,有一个 swig 接口(interface)文件 numpy.i,您可以按以下方式使用它。在您的 swig 接口(interface)文件中,您包括:

%{
#define SWIG_FILE_WITH_INIT
%}
%include "numpy.i"
%init %{
import_array();
%}

然后在您的接口(interface)文件中添加,在提及您的 C 函数之前:

%apply ( float* IN_ARRAY2, int DIM1, int DIM2 ) {
(float* your_array_parameter_name, int N_parameter_name, int M_parameter_name)
};

这适用于普通的 C float 数组。我不太确定 float* [] 是什么。您可能需要为此编写自己的类型映射,为此您可以使用 numpy.i 提供的实用程序宏。但这在上面提到的 numpy.i 文档或相关的 swig typemap docs 中都有解释。

关于python - 如何将 numpy ndarray 转换为 C float *[],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32692575/

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