我正在尝试使用boost::python将Python类移植到C++,希望能加快Python应用程序的执行速度(我要移植到C++的类负责大约30%的应用程序执行时间)。
原始Python类的初始化如下所示:
class PyClass(object):
def __init__(self, child):
child.set_parent(self)
...
如何在C++构造函数中复制它?
如果我有一个C++类:
class CClass
{
// to get input args that match the Python class I n
我有两个版本的一个程序。一个是用C写的,第二个是用Python写的。Python版本的开发远远超过了C版本,但是一个关键的函数是缓慢的,并且已经在C中出现了。
因此,我希望使用包装C版本,并将其导入Python中以提高速度。
但我不知道如何解析在Python中定义的类中的对象,在C函数中。
Python中定义的两个类具有许多属性:
class Py_input: #it will store the input data
def__init__(self):
selt.n1 = ...
self.n2 = ...
self.n3 = ..
我想访问我用C代码编写的一些python函数。我的一个python函数接收一个numpy数组作为输入。在我的C代码中,这个数组是在动态内存中分配的。每当我的python函数被调用时,我都会收到一个分段错误,并且我不确定我做错了什么。我试图将N,O,O&传递给Py_BuildValue函数,但我总是得到相同的结果。
以下是python的简化代码。
#Python simple function that receives pointer to array
#!/usr/bin/python3
import numpy as np
def getNumpyArrayPointer(poi
我是c++新手,我比c++了解更多的python,我不得不将代码从c++更改为python,在要更改的代码中我找到了以下句子:
p->arity = std::stoi(x, nullptr, 10);
我想为了简单起见,我们可以用
p->arity = x; /* or some whit pointers im really noob on c++ but i think this is not importan */
在python中,这是否意味着
p[arity] = x
或者类似的?不然呢?我有点迷失了,所有这些新的(对我来说)概念,比如指针和内存之类的东西,但是现在
我使用ctypes来调用C中的函数。函数需要指向连续数据的第一个元素和数据数量的指针。
其中一个有效的方法就是这样:
a=15 # a could be any number
temp = numpy.array([a]*14, dtype=numpy.int8)
c_function(temp.ctypes.data_as(ctypes.c_void_p), 14)
这真的很麻烦,需要同时使用numpy和ctypes。有没有其他更简单的方法可以同时在Python2和Python3中使用(AFAIK bytes([a]*14)可以,但只适用于Python3)
编辑:更有趣的是,这也可以工作(!