gpt4 book ai didi

python - SWIG:如何将复杂列表从 C++ 传递到 Python

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:12:54 26 4
gpt4 key购买 nike

我在 C++ 中有一个函数返回复杂的列表:

#include <complex>
std::list< std::complex<double> > func(...);

我应该在“*.i”文件中做什么?

谢谢大家。

=================

详情如下:

我想在 x.h 中的 python 中使用的函数:

std::list<std::complex<double> > roots1(const double& d, const double& e);

我尝试了一些方法:

(1) x.i:

%include <std_list.i>
%include <std_complex.i>

比起我在 IPython 中的尝试:

tmp = x.roots1(1.0, 2.0)
len(tmp)

我得到了:

---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-5-9ebf7dab7cd9> in <module>()
----> 1 len(tmp)

TypeError: object of type 'SwigPyObject' has no len()

和:

dir(tmp)

返回:

[ 
...
'acquire',
'append',
'disown',
'next',
'own']

(2) x.i:

%include <std_list.i>
%include <std_complex.i>
namespace std {
%template(ComplexDouble) complex<double>;
}

然后,我得到了编译错误:

error: command 'swig' failed with exit status 1
make: *** [py] Error 1

(3) 在 x.i 中:

%include <std_list.i>
%include <std_complex.i>
namespace std {
%template(ComplexDouble) list<complex<double> >;
}

或:

%include <std_list.i>
%include <std_complex.i>
namespace std {
%template(ComplexDouble) list<complex>;
}

我得到了:

x_wrap.cpp:5673:32: error: ‘complex’ was not declared in this scope
template <> struct traits<complex > {
^

============================================= =

(Mr./Ms./Mrs) m7thon 帮我找出问题所在。在我的 python 上下文中:

Ubuntu: 45~14.04.1
Python: 3.4.3
SWIG: SWIG Version 2.0.11
Compiled with g++ [x86_64-unknown-linux-gnu]
Configured options: +pcre

如果将 x.i 定义为:

%include <std_list.i>
%include <std_complex.i>
namespace std {
%template(ComplexList) list<complex<double> >;
}

会出现编译错误。但如果 x.i:

%include <std_list.i>
%include <std_complex.i>
%template(ComplexList) std::list< std::complex<double> >;

谢谢m7thon。

最佳答案

这个有效:

%include <std_list.i>
%include <std_complex.i>
%template(ComplexList) std::list<std::complex<double> >;
... (your includes / function declarations)

我认为您的版本 (3) 实际上也应该有效。奇怪的是它没有。可能是 SWIG 错误。

关于python - SWIG:如何将复杂列表从 C++ 传递到 Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38023521/

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