<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body dir="auto">You can also directly build a numpy array from a pointer with the numpy API. <div><br></div><div>And I recommend Cython as an interface to make these things easy.</div><div><br></div><div>This does mean you’d need to have the numpy lib at build time, .which may be a downside. </div><div><br></div><div>-CHB</div><div><br></div><div><br><div dir="ltr" id="AppleMailSignature"><span style="background-color:rgba(255,255,255,0)">Christopher Barker, Ph.D.<br>Oceanographer<br><br>Emergency Response Division<br>NOAA/NOS/OR&R            <a href="tel:(206)%20526-6959" dir="ltr">(206) 526-6959</a>   voice<br>7600 Sand Point Way NE   <a href="tel:(206)%20526-6329" dir="ltr" style="text-decoration-color:rgba(88,86,214,0.258824)">(206) 526-6329</a>   fax<br><a href="x-apple-data-detectors://6/1" dir="ltr" style="text-decoration-color:rgba(88,86,214,0.258824)">Seattle, WA  98115</a>       <a href="tel:(206)%20526-6317" dir="ltr" style="text-decoration-color:rgba(88,86,214,0.258824)">(206) 526-6317</a>   main reception</span></div><div dir="ltr"><br>On Jul 16, 2019, at 5:48 AM, Derek Homeier <<a href="mailto:derek@astro.physik.uni-goettingen.de">derek@astro.physik.uni-goettingen.de</a>> wrote:<br><br></div><blockquote type="cite"><div dir="ltr"><span>On 16 Jul 2019, at 9:30 am, Omry Levy <<a href="mailto:omrylevy@gmail.com">omrylevy@gmail.com</a>> wrote:</span><br><blockquote type="cite"><span></span><br></blockquote><blockquote type="cite"><span>I have a question, regarding conversion of C (unsigned char *) buffer to a two dimensional numpy array</span><br></blockquote><blockquote type="cite"><span></span><br></blockquote><blockquote type="cite"><span>this is what i am doing:</span><br></blockquote><blockquote type="cite"><span>1) I get a C network buffer of unsigned char *  let's call it the source buffer</span><br></blockquote><blockquote type="cite"><span>the size of the source buffer is:</span><br></blockquote><blockquote type="cite"><span>W * H * 2  bytes</span><br></blockquote><blockquote type="cite"><span></span><br></blockquote><blockquote type="cite"><span>2)  I am using PyByteArray_FromStringAndSize() to convert the source buffer (a C unsigned char *) to python bytes array.</span><br></blockquote><blockquote type="cite"><span>a = PyByteArray_FromStringAndSize(source buffer, W * H * 2) </span><br></blockquote><blockquote type="cite"><span></span><br></blockquote><blockquote type="cite"><span>3) i am using numpy.frombuffer   to convert the python bytes array to a 1 dimensional numpy array of size W *H *2 bytes</span><br></blockquote><blockquote type="cite"><span>b = numpy.frombuffer(a, dtype = np.uint8)</span><br></blockquote><blockquote type="cite"><span></span><br></blockquote><blockquote type="cite"><span>4) i am creating a 2 dimensional numpy array from (3) when each element in that array is made of 2 bytes from the python bytes array</span><br></blockquote><blockquote type="cite"><span>c = b.view(np.uint16).reshape((H, W))</span><br></blockquote><blockquote type="cite"><span></span><br></blockquote><blockquote type="cite"><span>Is there a way to optimize this some how ?</span><br></blockquote><blockquote type="cite"><span>Can you suggest a faster and better solution ?</span><br></blockquote><blockquote type="cite"><span></span><br></blockquote><span>The PyByteArray conversion seems unnecessary - if you can access your input as a buffer,</span><br><span>calling np.frombuffer on it directly with the correct dtype should work just as well, and you</span><br><span>can reshape it on the fly:</span><br><span></span><br><span>c = np.frombuffer(source_buffer, dtype=np.uint16, [count=W*H]).reshape((H, W))</span><br><span></span><br><span>The optional ‘count’ argument would only be required if you cannot simply read the buffer</span><br><span>to its end.</span><br><span></span><br><span>HTH,</span><br><span>                    Derek</span><br><span></span><br><span>_______________________________________________</span><br><span>NumPy-Discussion mailing list</span><br><span><a href="mailto:NumPy-Discussion@python.org">NumPy-Discussion@python.org</a></span><br><span><a href="https://mail.python.org/mailman/listinfo/numpy-discussion">https://mail.python.org/mailman/listinfo/numpy-discussion</a></span><br></div></blockquote></div></body></html>