¿Cómo filtrar la matriz numpy por lista de índices?

Soy relativamente nuevo en Python y he estado tratando de aprender a usar el numpy y scipy. Tengo una matriz numpy compuesta de datos LAS [x, y, z, intensidad, clasificación]. He creado un cKDTree de puntos y he encontrado vecinos más cercanos utilizando query_ball_point . Me gustaría encontrar la desviación estándar de los valores z para los vecinos devueltos por query_ball_point, que devuelve una lista de índices para el punto y sus vecinos.

¿Hay alguna forma de filtrar las filas filtradas para crear una matriz de solo puntos cuyo índice se encuentra en la lista devuelta por query_ball_point? Ver código a continuación. Puedo agregar los valores a una lista y calcular el desarrollo estándar a partir de eso, pero creo que sería más fácil usar numpy para calcular el desarrollo estándar en un solo eje. Gracias por adelantado.

# Import modules from liblas import file import numpy as np import scipy.spatial if __name__=="__main__": '''Read LAS file and create an array to hold X, Y, Z values''' # Get file las_file = r"E:\Testing\kd-tree_testing\LE_K20_clipped.las" # Read file f = file.File(las_file, mode='r') # Get number of points from header num_points = int(f.__len__()) # Create empty numpy array PointsXYZIC = np.empty(shape=(num_points, 5)) # Load all LAS points into numpy array counter = 0 for p in f: newrow = [px, py, pz, p.intensity, p.classification] PointsXYZIC[counter] = newrow counter += 1 '''Filter array to include classes 1 and 2''' # the values to filter against unclassified = 1 ground = 2 # Create an array of booleans filter_array = np.any([PointsXYZIC[:, 4] == 1, PointsXYZIC[:, 4] == 2], axis=0) # Use the booleans to index the original array filtered_rows = PointsXYZIC[filter_array] '''Create a KD tree structure and segment the point cloud''' tree = scipy.spatial.cKDTree(filtered_rows, leafsize=10) '''For each point in the point cloud use the KD tree to identify nearest neighbors, with a K radius''' k = 5 #meters for pntIndex in range(len(filtered_rows)): neighbor_list = tree.query_ball_point(filtered_rows[pntIndex], k) zList = [] for neighbor in neighbor_list: neighbor_z = filtered_rows[neighbor, 2] zList.append(neighbor_z) 

ummmm Es difícil saber qué se pregunta (eso es todo el muro de texto)

 filter_indices = [1,3,5] print numpy.array([11,13,155,22,0xff,32,56,88])[filter_indices] 

puede ser lo que estás preguntando