[Numpy-discussion] How to call methods from a class with custom matrices parameters with numpy arrays ?
David Cournapeau
david at ar.media.kyoto-u.ac.jp
Thu Apr 19 07:15:04 EDT 2007
Matthieu Brucher wrote:
>
> You should give ctypes a try, I find it much better than swig most
> of the time for wrapping. You can find some doc here:
>
> http://www.scipy.org/Cookbook/Ctypes2
>
> Basically, once you get your dll/so with a function foo(double *a,
> int n), you can call it directly in numpy by passing directly a numpy
> array. The catch is that the layout of the array should be exactly the
> same than your function expects (most of the time a contiguous array),
> but there are numpy functions which enforce that. As long as you
> are not
> calling thousand of function with small arrays, the wrapping is pretty
> efficient in my experience.
>
> cheers,
>
> David
>
>
>
> Thanks for the fast answer ;)
> I was wondering if ctypes would fit better, but in this case, I have
> to make the wrapper myself, I suppose ?
> Here is the basic prototype of what I have - it's a cost function I
> want to optimize with optimizers I proposed on scipy recently - :
>
> template<class MatrixType>
> struct CostFunction
> {
> CostFunction(const MatrixType& points, ...)
> {
> }
>
> const MatrixType gradient(const Matrixtype& parameters)
> {
> // ...
> return aNewGradient;
> }
> };
>
> So I have to create a function that takes a numpy array and that
> returns and instance of my cost function, this is pretty simple to do,
> the matrix can be constructed from its two dimensions and a pointer,
> but for the gradient method, I have trouble seeing how to do wrap it :(
I forgot you are using C++. Using C++ with ctypes makes the wrapping
more difficult, I think, specially since you are using templates: you
would have to write a C wrapper around your classes, and then using
ctypes on the wrapper (there may be better ways, but I don't see an
obvious one). Basically, using ctypes is like using code from a
dynamically loaded library (ala VST :) ). But writing some C code kills
one of the strong point of ctypes (doing all the wrapping in python).
I have attached a simplistic example which show how to wrap some functions.
David
-------------- next part --------------
A non-text attachment was scrubbed...
Name: example.tbz2
Type: application/x-bzip-compressed-tar
Size: 4581 bytes
Desc: not available
URL: <http://mail.python.org/pipermail/numpy-discussion/attachments/20070419/90314be3/attachment.bin>
More information about the NumPy-Discussion
mailing list