<html><body><div style="color:#000; background-color:#fff; font-family:times new roman, new york, times, serif;font-size:12pt">Hi John,<br><br>""<div><span><br></span></div><div><br></div>  <div style="font-family: times new roman, new york, times, serif; font-size: 12pt;"> <div style="font-family: times new roman, new york, times, serif; font-size: 12pt;"> <div dir="ltr"> <font face="Arial" size="2"> <hr size="1">  <b><span style="font-weight:bold;">From:</span></b> John Reid &lt;j.reid@mail.cryst.bbk.ac.uk&gt;<br> <b><span style="font-weight: bold;">To:</span></b> cplusplus-sig@python.org <br> <b><span style="font-weight: bold;">Sent:</span></b> Wednesday, August 22, 2012 12:58 PM<br> <b><span style="font-weight: bold;">Subject:</span></b> Re: [C++-sig] Accessing 2D array from python in C++<br> </font> </div> Hi John,<br><br>
"You can call the expose_converters&lt; npy_double &gt;() function to expose<br>multiarrays of doubles to python as numpy arrays."<br><br>I'm afraid you understood that I have C++ array to be exposed as&nbsp; numpy arrays in Python. My problem is actually the other way around, in which I have a 2D python array/matrix that I want to convert to/access in C++.<br><br>Thanks in advance.<br><br><br><br>On 22/08/12 11:45, alfa wrote:<br>&gt; Hi John,<br>&gt; <br>&gt; I'm sorry, I'm a bit confused because previously you said that the<br>&gt; relevant implementation resides in<br>&gt; "c++/myrrh/myrrh/python/multi_array_to_numpy.h"but now, you point to<br>&gt; "src/python/man_module.cpp and src/python/multi_array_to_numpy.cpp".<br>&gt; Hope you understand my problem of having 2D array in python that needs<br>&gt; to be exposed/converted to C++. It would be great If I know any<br>&gt; method/function that I can invoke from any of your implementations.<br>&gt;
 <br>&gt; Thanks in advance.<br><br>Hi Alfa,<br><br>You can look at all of the code I've mentioned to work out how it works.<br>If it does not make sense perhaps it might be worth working through the<br>boost.python tutorial to get up to speed on how boost.python works.<br><br>You can call the expose_converters&lt; npy_double &gt;() function to expose<br>multiarrays of doubles to python as numpy arrays.<br><br>Please ask if you have any specific questions.<br><br>Regards,<br>John.<br><br><br>&gt; <br>&gt; <br>&gt; ------------------------------------------------------------------------<br>&gt; *From:* John Reid &lt;<a ymailto="mailto:j.reid@mail.cryst.bbk.ac.uk" href="mailto:j.reid@mail.cryst.bbk.ac.uk">j.reid@mail.cryst.bbk.ac.uk</a>&gt;<br>&gt; *To:* <a ymailto="mailto:cplusplus-sig@python.org" href="mailto:cplusplus-sig@python.org">cplusplus-sig@python.org</a><br>&gt; *Sent:* Wednesday, August 22, 2012 12:28 PM<br>&gt; *Subject:* Re: [C++-sig]
 Accessing 2D array from python in C++<br>&gt; <br>&gt; On 22/08/12 11:13, alfa wrote:<br>&gt;&gt; Hi John,<br>&gt;&gt;<br>&gt;&gt; Thanks a lot for your implementation. In multi_array_to_numpy.h,&nbsp; can<br>&gt;&gt; you give more hints on which method/function that I can possibly use if<br>&gt;&gt; I can include it in my implementation as a header file.<br>&gt;&gt;<br>&gt;&gt; Thanks in advance.<br>&gt;&gt;<br>&gt; src/python/man_module.cpp and src/python/multi_array_to_numpy.cpp<br>&gt; implement a boost.python module that exposes the multi-array classes.<br>&gt; You have choose which data types you expose multiarrays for.<br>&gt; <br>&gt; HTH,<br>&gt; John.<br>&gt; <br>&gt; <br>&gt;&gt;<br>&gt;&gt; ------------------------------------------------------------------------<br>&gt;&gt; *From:* John Reid &lt;<a ymailto="mailto:j.reid@mail.cryst.bbk.ac.uk" href="mailto:j.reid@mail.cryst.bbk.ac.uk">j.reid@mail.cryst.bbk.ac.uk</a><br>&gt; &lt;mailto:<a
 ymailto="mailto:j.reid@mail.cryst.bbk.ac.uk" href="mailto:j.reid@mail.cryst.bbk.ac.uk">j.reid@mail.cryst.bbk.ac.uk</a>&gt;&gt;<br>&gt;&gt; *To:* <a ymailto="mailto:cplusplus-sig@python.org" href="mailto:cplusplus-sig@python.org">cplusplus-sig@python.org</a> &lt;mailto:<a ymailto="mailto:cplusplus-sig@python.org" href="mailto:cplusplus-sig@python.org">cplusplus-sig@python.org</a>&gt;<br>&gt;&gt; *Sent:* Thursday, August 16, 2012 5:02 PM<br>&gt;&gt; *Subject:* Re: [C++-sig] Accessing 2D array from python in C++<br>&gt;&gt;<br>&gt;&gt; If you don't mind digging around in my code, you could download the<br>&gt;&gt; source code for the STEME python package from pypi and look in the<br>&gt;&gt; c++/myrrh directory. There is code to access multi_arrays from python in<br>&gt;&gt; there.<br>&gt;&gt;<br>&gt;&gt; http://pypi.python.org/pypi/STEME/<br>&gt;&gt;<br>&gt;&gt; In particular the file<br>&gt;&gt; c++/myrrh/myrrh/python/multi_array_to_numpy.h contains the
 bulk of the<br>&gt;&gt; implementation.<br>&gt;&gt;<br>&gt;&gt; HTH,<br>&gt;&gt; John.<br>&gt;&gt;<br>&gt;&gt;<br>&gt;&gt;<br>&gt;&gt; On 16/08/12 09:29, alfa wrote:<br>&gt;&gt;&gt; Hi,<br>&gt;&gt;&gt;<br>&gt;&gt;&gt; Could you give more hints on this or any code snippet that I can<br>&gt;&gt;&gt; implement this. I'm a bit naive in applying this. Please consider my 2D<br>&gt;&gt;&gt; array of Vp_cpp(Vp equivalent in Python) is as below:<br>&gt;&gt;&gt;<br>&gt;&gt;&gt;&nbsp; &nbsp; typedef boost::multi_array&lt;double, 2&gt; array_type;<br>&gt;&gt;&gt;&nbsp; &nbsp; typedef array_type::index index;<br>&gt;&gt;&gt;&nbsp; &nbsp; array_type Vp_cpp(boost::extents[X_cpp][X_cpp]);<br>&gt;&gt;&gt;<br>&gt;&gt;&gt;<br>&gt;&gt;&gt; I'm still puzzled how to "manually wrap the features" in the last<br>&gt;&gt; "..." in:<br>&gt;&gt;&gt;&nbsp; &nbsp; boost::python::class_&lt; boost::multi_array&lt;...&gt; &gt;(...)<br>&gt;&gt;&gt;<br>&gt;&gt;&gt; Thanks in
 advance.<br>&gt;&gt;&gt;<br>&gt;&gt;&gt; ------------------------------------------------------------------------<br>&gt;&gt;&gt; *From:* Jim Bosch &lt;<a ymailto="mailto:talljimbo@gmail.com" href="mailto:talljimbo@gmail.com">talljimbo@gmail.com</a> &lt;mailto:<a ymailto="mailto:talljimbo@gmail.com" href="mailto:talljimbo@gmail.com">talljimbo@gmail.com</a>&gt;<br>&gt; &lt;mailto:<a ymailto="mailto:talljimbo@gmail.com" href="mailto:talljimbo@gmail.com">talljimbo@gmail.com</a> &lt;mailto:<a ymailto="mailto:talljimbo@gmail.com" href="mailto:talljimbo@gmail.com">talljimbo@gmail.com</a>&gt;&gt;&gt;<br>&gt;&gt;&gt; *To:* alfa &lt;<a ymailto="mailto:alfarobi0161@yahoo.com" href="mailto:alfarobi0161@yahoo.com">alfarobi0161@yahoo.com</a> &lt;mailto:<a ymailto="mailto:alfarobi0161@yahoo.com" href="mailto:alfarobi0161@yahoo.com">alfarobi0161@yahoo.com</a>&gt;<br>&gt; &lt;mailto:<a ymailto="mailto:alfarobi0161@yahoo.com"
 href="mailto:alfarobi0161@yahoo.com">alfarobi0161@yahoo.com</a> &lt;mailto:<a ymailto="mailto:alfarobi0161@yahoo.com" href="mailto:alfarobi0161@yahoo.com">alfarobi0161@yahoo.com</a>&gt;&gt;&gt;<br>&gt;&gt;&gt; *Cc:* Development of Python/C++ integration &lt;<a ymailto="mailto:cplusplus-sig@python.org" href="mailto:cplusplus-sig@python.org">cplusplus-sig@python.org</a><br>&gt; &lt;mailto:<a ymailto="mailto:cplusplus-sig@python.org" href="mailto:cplusplus-sig@python.org">cplusplus-sig@python.org</a>&gt;<br>&gt;&gt; &lt;mailto:<a ymailto="mailto:cplusplus-sig@python.org" href="mailto:cplusplus-sig@python.org">cplusplus-sig@python.org</a> &lt;mailto:<a ymailto="mailto:cplusplus-sig@python.org" href="mailto:cplusplus-sig@python.org">cplusplus-sig@python.org</a>&gt;&gt;&gt;<br>&gt;&gt;&gt; *Sent:* Wednesday, August 15, 2012 5:34 PM<br>&gt;&gt;&gt; *Subject:* Re: [C++-sig] Accessing 2D array from python in C++<br>&gt;&gt;&gt;<br>&gt;&gt;&gt; On Aug 15, 2012
 1:57 AM, "alfa" &lt;<a ymailto="mailto:alfarobi0161@yahoo.com" href="mailto:alfarobi0161@yahoo.com">alfarobi0161@yahoo.com</a><br>&gt; &lt;mailto:<a ymailto="mailto:alfarobi0161@yahoo.com" href="mailto:alfarobi0161@yahoo.com">alfarobi0161@yahoo.com</a>&gt;<br>&gt;&gt; &lt;mailto:<a ymailto="mailto:alfarobi0161@yahoo.com" href="mailto:alfarobi0161@yahoo.com">alfarobi0161@yahoo.com</a> &lt;mailto:<a ymailto="mailto:alfarobi0161@yahoo.com" href="mailto:alfarobi0161@yahoo.com">alfarobi0161@yahoo.com</a>&gt;&gt;<br>&gt;&gt;&gt; &lt;mailto:<a ymailto="mailto:alfarobi0161@yahoo.com" href="mailto:alfarobi0161@yahoo.com">alfarobi0161@yahoo.com</a> &lt;mailto:<a ymailto="mailto:alfarobi0161@yahoo.com" href="mailto:alfarobi0161@yahoo.com">alfarobi0161@yahoo.com</a>&gt;<br>&gt; &lt;mailto:<a ymailto="mailto:alfarobi0161@yahoo.com" href="mailto:alfarobi0161@yahoo.com">alfarobi0161@yahoo.com</a> &lt;mailto:<a ymailto="mailto:alfarobi0161@yahoo.com"
 href="mailto:alfarobi0161@yahoo.com">alfarobi0161@yahoo.com</a>&gt;&gt;&gt;&gt; wrote:<br>&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt; I apologize for double posting this because it was spammed before.<br>&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt; Hi Jim,<br>&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt; Do you mean, "you could wrap multi_array itself using class_", I<br>&gt;&gt;&gt; should do as below:<br>&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt; boost::python::class_&lt;std::vector&lt;std::vector&lt;double&gt; &gt;<br>&gt;&gt;&gt;&gt;("PyVec").def(boost::python::vector_indexing_suite&lt;std::vector&lt;std::vector&lt;double&gt;<br>&gt;&gt;&gt;&gt; &gt;());<br>&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt; No, I don't think that will work; I meant something like this:<br>&gt;&gt;&gt; boost::python::class_&lt; boost::multi_array&lt;...&gt; &gt;(...)<br>&gt;&gt;&gt;&nbsp; &nbsp; ...;<br>&gt;&gt;&gt; Where the last "..." is where you have to manually wrap the features of<br>&gt;&gt;&gt; multi_array
 you want to use.&nbsp; I'm afraid there's nothing as easy as<br>&gt;&gt;&gt; vector_indexing_suite.<br>&gt;&gt;&gt; Jim<br>&gt;&gt;&gt;<br>&gt;&gt;&gt;<br>&gt;&gt;&gt;<br>&gt;&gt;&gt;<br>&gt;&gt;&gt; _______________________________________________<br>&gt;&gt;&gt; Cplusplus-sig mailing list<br>&gt;&gt;&gt; <a ymailto="mailto:Cplusplus-sig@python.org" href="mailto:Cplusplus-sig@python.org">Cplusplus-sig@python.org</a> &lt;mailto:<a ymailto="mailto:Cplusplus-sig@python.org" href="mailto:Cplusplus-sig@python.org">Cplusplus-sig@python.org</a>&gt;<br>&gt; &lt;mailto:<a ymailto="mailto:Cplusplus-sig@python.org" href="mailto:Cplusplus-sig@python.org">Cplusplus-sig@python.org</a> &lt;mailto:<a ymailto="mailto:Cplusplus-sig@python.org" href="mailto:Cplusplus-sig@python.org">Cplusplus-sig@python.org</a>&gt;&gt;<br>&gt;&gt;&gt; <a href="http://mail.python.org/mailman/listinfo/cplusplus-sig"
 target="_blank">http://mail.python.org/mailman/listinfo/cplusplus-sig</a><br>&gt;&gt;&gt;<br>&gt;&gt;<br>&gt;&gt; _______________________________________________<br>&gt;&gt; Cplusplus-sig mailing list<br>&gt;&gt; <a ymailto="mailto:Cplusplus-sig@python.org" href="mailto:Cplusplus-sig@python.org">Cplusplus-sig@python.org</a> &lt;mailto:<a ymailto="mailto:Cplusplus-sig@python.org" href="mailto:Cplusplus-sig@python.org">Cplusplus-sig@python.org</a>&gt;<br>&gt; &lt;mailto:<a ymailto="mailto:Cplusplus-sig@python.org" href="mailto:Cplusplus-sig@python.org">Cplusplus-sig@python.org</a> &lt;mailto:<a ymailto="mailto:Cplusplus-sig@python.org" href="mailto:Cplusplus-sig@python.org">Cplusplus-sig@python.org</a>&gt;&gt;<br>&gt;&gt; <a href="http://mail.python.org/mailman/listinfo/cplusplus-sig" target="_blank">http://mail.python.org/mailman/listinfo/cplusplus-sig</a><br>&gt;&gt;<br>&gt;&gt;<br>&gt;&gt;<br>&gt;&gt;<br>&gt;&gt;
 _______________________________________________<br>&gt;&gt; Cplusplus-sig mailing list<br>&gt;&gt; <a ymailto="mailto:Cplusplus-sig@python.org" href="mailto:Cplusplus-sig@python.org">Cplusplus-sig@python.org</a> &lt;mailto:<a ymailto="mailto:Cplusplus-sig@python.org" href="mailto:Cplusplus-sig@python.org">Cplusplus-sig@python.org</a>&gt;<br>&gt;&gt; <a href="http://mail.python.org/mailman/listinfo/cplusplus-sig" target="_blank">http://mail.python.org/mailman/listinfo/cplusplus-sig</a><br>&gt;&gt;<br>&gt; <br>&gt; _______________________________________________<br>&gt; Cplusplus-sig mailing list<br>&gt; <a ymailto="mailto:Cplusplus-sig@python.org" href="mailto:Cplusplus-sig@python.org">Cplusplus-sig@python.org</a> &lt;mailto:<a ymailto="mailto:Cplusplus-sig@python.org" href="mailto:Cplusplus-sig@python.org">Cplusplus-sig@python.org</a>&gt;<br>&gt; <a href="http://mail.python.org/mailman/listinfo/cplusplus-sig"
 target="_blank">http://mail.python.org/mailman/listinfo/cplusplus-sig</a><br>&gt; <br>&gt; <br>&gt; <br>&gt; <br>&gt; _______________________________________________<br>&gt; Cplusplus-sig mailing list<br>&gt; <a ymailto="mailto:Cplusplus-sig@python.org" href="mailto:Cplusplus-sig@python.org">Cplusplus-sig@python.org</a><br>&gt; <a href="http://mail.python.org/mailman/listinfo/cplusplus-sig" target="_blank">http://mail.python.org/mailman/listinfo/cplusplus-sig</a><br>&gt; <br><br>_______________________________________________<br>Cplusplus-sig mailing list<br><a ymailto="mailto:Cplusplus-sig@python.org" href="mailto:Cplusplus-sig@python.org">Cplusplus-sig@python.org</a><br><a href="http://mail.python.org/mailman/listinfo/cplusplus-sig" target="_blank">http://mail.python.org/mailman/listinfo/cplusplus-sig</a><br><br><br> </div> </div>  </div></body></html>