我的类有一个包含自定义类对象的c ++矢量成员。我希望能够从python中读取这个向量作为列表,但我无法以任何方式进行。
我的标题:
from __future__ import division
import cython
from libcpp.vector cimport vector #this import the C++ vector, which
#is compatible with python lists
import numpy as np
cimport numpy as np
#@cython.boundscheck(False) #this line remove some correct checking for
#for bounds, which makes it hard to debug
#but also faster
这是我的自定义类:
ctypedef class boid:
"""Placeholder for the boids"""
cdef public vector[double] pos #position of the boid
cdef public vector[double] vel #velocity of the boid
def __init__(self, vector[double] pos_):
self.pos = pos_
这是另一个有矢量的类。
cdef class csopsim:
"""This is the simulation"""
#declaring c variable types
cdef vector[boid] boids #list of boids
def __init__(self,int scenario):
#setting default values
self.BOX_SIZE = 640
self.BOX = float(self.BOX_SIZE)
self.NUM_MALES = 10
for x in xrange(self.NUM_MALES):
self.boids.push_back(boid(0,np.random.uniform(350,450,2)))
这很好地编译,但显然尝试获取csopsim.boids会抛出无属性错误。如果我将其修改为
cdef public vector[boid] boids
它无法编译。如果我创建一个方法
def getboids(self):
return self.boids
它无法编译。如果我创建一个方法
cdef vector[boid] getboids(self):
return self.boids
它编译,但是当我尝试从python调用该方法时,它抛出一个AttributeError:'csopsim.csopsim'对象没有属性'getboids'。我希望这个问题有一个简单而简单的解决办法:)
答案 0 :(得分:-1)
我使用cythonize一个纯c ++类,因为它似乎工作,并且更直接。