Re: [C++-sig] How to call reshape((M,N),order='F') ?
by Michele De Stefano other posts by this author
Oct 29 2009 12:58AM messages near this date
Re: [C++-sig] How to call reshape((M,N),order='F') ?
|
[C++-sig] Python converters for raw pointers: request for help
Thank you Sebastian.
I discovered also that the problem could be solved using the global
numpy.reshape.
That function, does not complain if the last parameter is simply "F"
and not "storage=F".
Anyway the issue is still open.
If anyone knows it, is it possible to explicitly specify a named
parameter through a call to "attr" ?
2009/10/28 Sebastian Walter <walter@[...].de> :
>
> > Hello to everyone.
> >
> > I have this problem.
> >
> > Assume I'm building a to-Python converter for a 3x2 matrix type,
> > FORTRAN storage (these are not the real dimensions of my problem, but
> > I give these numbers only to simplify the discussion).
> >
> > Into the "convert" C++ method, first, I build a list with all the
> > matrix elements (lout);
> > then, I instantiate a boost::python::numeric::array in this way (note:
> > I had previously used
> > set_module_and_type("numpy","ndarray"), for using the NumPy's array):
> >
> > boost::python::numeric::array  v(lout)
> >
> > Finally, I'd like to call "reshape" on this array, in this way
> >
> > v.attr("reshape")(make_tuple(3,2),"F");
>
> don't know the answer to your question, but you could do the following:
>
> set the strides of the underlying PyArrayObject manually to match column
> major format, i.e.
> PyArrayObject  *v_array_obj = reinterpret_cast<PyArrayObject*> ( v.ptr() );
> v_array_obj->strides[0] = sizeof(double);
> v_array_obj->strides[1] = 3 * sizeof(double);
>
> hope that helps,
>
> Sebastian
>
>
> >
> > But it does not work. It builds, but, on runtime, I obtain the error:
> >
> > Traceback (most recent call last):
> > Â File "<stdin>", line 1, in ?
> > TypeError: an integer is required
> >
> > I tried to build and re-shape a matrix entirely from Python and I
> > discovered that, when using reshape,
> > you are forced to give the second parameter as
> >
> > order = 'C' or 'F'
> >
> > Now the question is: is it possible to specify a named parameter from
> > the C++ code ?
> > If the answer is "yes", how ?
> >
> > Thank you in advance,
> > Michele
> >
> > --
> > Michele De Stefano
> > http://www.linkedin.com/in/micdestefano
> > _______________________________________________
> > Cplusplus-sig mailing list
> > Cplusplus-sig@[...].org
> > http://mail.python.org/mailman/listinfo/cplusplus-sig
> >
>
>
> --
> Sebastian Walter
>
> Institut fuer Mathematik, Humboldt-Universitaet   Tel: +49 (30) 2093-5869
> Rudower Chaussee 25, Adlershof, Berlin       Fax: +49 (30) 2093-5859
> Post: Unter den Linden 6, D-10099 Berlin     Email:
> walter@[...].de
> WWW: http://www.mathematik.hu-berlin.de/~walter
>
> _______________________________________________
> Cplusplus-sig mailing list
> Cplusplus-sig@[...].org
> http://mail.python.org/mailman/listinfo/cplusplus-sig
>
--
Michele De Stefano
http://www.linkedin.com/in/micdestefano
http://xoomer.virgilio.it/michele_de_stefano
_______________________________________________
Cplusplus-sig mailing list
Cplusplus-sig@[...].org
http://mail.python.org/mailman/listinfo/cplusplus-sig
Thread:
Michele De Stefano
Sebastian Walter
Michele De Stefano
|