|
View:
New views
3 Messages
—
Rating Filter:
Alert me
|
|
|
How to call reshape((M,N),order='F') ?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"); 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@... http://mail.python.org/mailman/listinfo/cplusplus-sig |
|
|
Re: How to call reshape((M,N),order='F') ?> 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@... > 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@... WWW: http://www.mathematik.hu-berlin.de/~walter _______________________________________________ Cplusplus-sig mailing list Cplusplus-sig@... http://mail.python.org/mailman/listinfo/cplusplus-sig |
|
|
Re: How to call reshape((M,N),order='F') ?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@...>: > >> 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@... >> 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@... > WWW: http://www.mathematik.hu-berlin.de/~walter > > _______________________________________________ > Cplusplus-sig mailing list > Cplusplus-sig@... > 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@... http://mail.python.org/mailman/listinfo/cplusplus-sig |
| Free embeddable forum powered by Nabble | Forum Help |