<div dir="ltr"><div>Giuseppe,</div><div><br></div>I've been playing around with some ways you could do this in the PDAL pipeline. It seems we've got lots of things that would be very close, but not exactly what you'd want. Still looking though.<div><br></div><div>Pandas and numpy will both do what you want though, with just a slightly different syntax.</div><div><br></div><div>import numpy as np</div><div>data = p.arrays[0]</div><div><div>firsts = data[np.where(data['ReturnNumber']==1)]</div><div>others = data[np.where(data['ReturnNumber']!=1)]</div></div><div><br></div><div>import pandas as pd</div><div>data = p.arrays[0]</div><div><div>df = pd.DataFrame(data)</div><div>firsts = df[df['ReturnNumber']==1]</div><div>others = df[df['ReturnNumber']!=1]</div></div><div><br></div><div>Do either of these produce the results you are expecting? If so, do you really need to do it in PDAL, or is the Python-based solution sufficient?</div><div><br></div><div>Brad</div><br><div class="gmail_quote"><div dir="ltr">On Mon, Oct 2, 2017 at 10:00 AM Giuseppe Falcone <<a href="mailto:falcone.giuseppe@gmail.com" target="_blank">falcone.giuseppe@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>Thanks for the response, but maybe I didn't explain well what I want.</div><div><br></div><div>The pipeline result is like this:</div><div><br></div><div>[( 626708.60087012,  4481781.14910498,  7.478, 0, 2, 2, 1, 0, 4, -11., 0, 0,  0.,  7.478),( 626708.34087012,  4481780.92910498,  5.418, 0, 1, 3, 1, 0, 4, -11., 0, 0,  0.,  5.418),....]</div><div><br></div><div>the name of dimensions are:</div><div> (u'X', u'Y', u'Z', u'Intensity', u'ReturnNumber', u'NumberOfReturns', u'ScanDirectionFlag', u'EdgeOfFlightLine', u'Classification', u'ScanAngleRank', u'UserData', u'PointSourceId', u'GpsTime', u'HeightAboveGround')</div><div><br></div><div>I want to split this array in two subarray: the first with element that have ReturnNumber (fifth value) dimension = 1 and the second with all others elements.</div><div><br></div><div>So, I have:</div><div><br></div><div>1st  subarray -> [( 626708.60087012,  4481781.14910498,  7.478, 0, 2, 2, 1, 0, 4, -11., 0, 0,  0.,  7.478), ....]</div><div>2nd subarray -> [( 626708.34087012,  4481780.92910498,  5.418, 0, 1, 3, 1, 0, 4, -11., 0, 0,  0.,  5.418), ....]</div><div><br></div><div>Thanks</div></div><div dir="ltr"><div><br></div><div>Giuseppe</div></div><div class="gmail_extra"><br><div class="gmail_quote">2017-10-02 15:52 GMT+02:00 Howard Butler <span dir="ltr"><<a href="mailto:howard@hobu.co" target="_blank">howard@hobu.co</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word"><span><br><div><blockquote type="cite"><div>On Oct 2, 2017, at 5:50 AM, Giuseppe Falcone <<a href="mailto:falcone.giuseppe@gmail.com" target="_blank">falcone.giuseppe@gmail.com</a>> wrote:</div><br class="m_-2715868996436106988m_-7928689825204312402m_-8856016405514163882Apple-interchange-newline"><div><div dir="ltr">Hi to all,<div><br></div><div>I have a pipe that elaborate a las file. on the pipe.arrays[0] command I have, as result, a ndarray.<br></div><div>I want to split this array in twa subarray: the first with element that have ReturnNumber dimension = 1 and the second with all others elements.</div><div><br></div><div>There is an efficient way to do this?</div></div></div></blockquote><br></div></span><div>numpy.where is probably the cleanest way to do this purely in python <a href="https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.where.html" target="_blank">https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.where.html</a></div><div><br></div><div><blockquote type="cite"><div>return_nos = pipe.arrays[0]['ReturnNumber']</div><div>firsts = np.where(return_nos < 2)</div></blockquote><div><div><br></div></div><div>Another way would be to write a pipeline with two readers.las, two filters.range, and a filters.merge. Both readers.las would read the same file, and each filters.range would define the range [1] of ReturnNumber you wanted in each set. Then you would use a filters.merge to bring them back together into two separate arrays. This approach is less than ideal due to the fact that you end up reading the same file twice.</div><div><br></div><div>Howard</div><div><br></div><div>[1] <a href="https://www.pdal.io/stages/filters.range.html#ranges" target="_blank">https://www.pdal.io/stages/filters.range.html#ranges</a></div></div></div></blockquote></div><br></div>
_______________________________________________<br>
pdal mailing list<br>
<a href="mailto:pdal@lists.osgeo.org" target="_blank">pdal@lists.osgeo.org</a><br>
<a href="https://lists.osgeo.org/mailman/listinfo/pdal" rel="noreferrer" target="_blank">https://lists.osgeo.org/mailman/listinfo/pdal</a></blockquote></div></div>