[Numpy-discussion] Extract subset from an array

Nicola Creati ncreati at inogs.it
Tue Feb 16 07:42:37 EST 2010


Hello,
I need to extract a subset from a Nx3 array. Each row has x, y, and z 
coordinates.
The subset is just a portion of the array in which the following 
condition realizes

x_min < x < x_max and y_min < y < y_max

The problem reduce to the extraction of points inside a rectangular box 
defined by
x_min, x_max, y_min, y_max.

I work with large arrays, the number or rows is always larger than 5x1e7.
I'm looking for a fast way to extract the subset.

At the moment I found a solution that seems the best. This is a small 
example:

import numpy as np

# Create a large 1e7x3 array of random numbers
array = np.random.random((10000000, 3))

# Define rectangular box
x_min = 0.3
x_max = 0.5
y_min = 0.4
y_max = 0.7

# Create bool array that indicates the elemnts of array to extract
condition = (array[:,0]>x_min) & (array[:,0]<x_max) & (array[:,1]>y_min) 
& (array[:,1]<y_max)

# Extract the subset
subset = array[condition]

Are there any faster solution?

Thanks,

Nicola

-- 
Nicola Creati
Istituto Nazionale di Oceanografia e di Geofisica Sperimentale - OGS www.inogs.it Dipartimento di Geofisica della Litosfera Geophysics of Lithosphere Department CARS (Cartography and Remote Sensing) Research Group http://www.inogs.it/Cars/ Borgo Grotta Gigante 42/c 34010 Sgonico - Trieste - ITALY ncreati at ogs.trieste.it
off.   +39 040 2140 213
fax.   +39 040 327307

_____________________________________________________________________
This communication, that may contain confidential and/or legally privileged information, is intended solely for the use of the intended addressees. Opinions, conclusions and other information contained in this message, that do not relate to the official business of OGS, shall be considered as not given or endorsed by it. Every opinion or advice contained in this communication is subject to the terms and conditions provided by the agreement governing the engagement with such a client. Any use, disclosure, copying or distribution of the contents of this communication by a not-intended recipient or in violation of the purposes of this communication is strictly prohibited and may be unlawful. For Italy only: Ai sensi del D.Lgs.196/2003 - "T.U. sulla Privacy" si precisa che le informazioni contenute in questo messaggio sono riservate ed a uso esclusivo del destinatario.
_____________________________________________________________________ 




More information about the NumPy-Discussion mailing list