我想在使用Eigen :: Matrix3d矩陣的庫中爲Cython創建一個包裝。我如何設置Matrix3d對象的單個元素/係數?在Cython中設置Eigen :: Matrix3d的係數/元素
我知道,我可以用coeff(row, col)
方法得到值,但找不到任何函數set_coeff(row, col, value)
- 或者可能被稱爲 - 來設置值。
與
cdef decl_eigen.Matrix3d t = decl_eigen.Matrix3d()
宣佈將Matrix3D後,我想設置的值,但沒有以下結構的用Cython工作:
t << 1,2,3,4,5,6,7,8,9
t(0,0) = 1
t[0][0] = 1
,我不能用一個構造函數的值,因爲據我所知,不存在任何。
這裏是我想出迄今文件:
decl_eigen.pxd:
cdef extern from "Eigen/Dense" namespace "Eigen":
cdef cppclass Vector3d:
Matrix3d() except +
double coeff(int row, int col)
decl_foo.pxd:
cimport decl_eigen
cdef extern from "../foo.hpp" namespace "MyFoo":
cdef cppclass Bar:
Bar() except +
void transform(decl_eigen.Matrix3d &transformation)
foo.pyx :
import decl_eigen
cimport decl_foo
cdef class Bar:
cdef decl_foo.Bar *thisptr
def __cinit__(self):
self.thisptr = new decl_foo.Bar()
def __dealloc__(self):
del self.thisptr
def transform(self, transformation):
cdef decl_eigen.Matrix3d t = decl_eigen.Matrix3d()
for i in range(3):
for j in range(3):
k = i*3 + j
# Set the coefficient of t(i,j) to transformation[k], but how????
self.thisptr.transform(t)
謝謝。
我沒有cython的經驗,所以請耐心等待。有'data()'[函數](http://eigen.tuxfamily.org/dox/classEigen_1_1PlainObjectBase。html#a4663159a1450fa89214b1ab71f7ef5bf)它可以讓你訪問一個指向數據的指針。然後,您可以通過數學來分配所需的值。另外,你聲明'cdef decl_eigen.Matrix3d t = decl_eigen.Matrix3d()'不起作用,然後在'foo.pyx'中有'cdef decl_eigen.Matrix3d t = decl_eigen.Matrix3d()'。那是對的嗎? –
謝謝Avi指出這種不一致。 'cdef'聲明確實有效。我重新提出了一些問題。 – HaM
Avi的建議可以進行以下修改: – HaM