Comment filtrer un tableau numpy par liste d'indices?
Je suis relativement nouveau à python et ont essayé d'apprendre à utiliser numpy et scipy. J'ai un tableau numpy composé de données LAS [x, y, z, intensité, classement]. J'ai créé un cKDTree de points et ont trouvé des voisins les plus proches à l'aide de query_ball_point. Je voudrais trouver l'écart type des valeurs z pour les voisins retourné par query_ball_point, qui retourne une liste d'indices pour le point et ses voisins.
Est-il un moyen de filtrer filtré__lignes pour créer un tableau de seuls les points dont l'index est dans la liste renvoyée par query_ball_point? Voir le code ci-dessous. Je peux ajouter les valeurs d'une liste et de calculer std dev, mais je pense qu'il serait plus facile à utiliser numpy pour calculer std dev sur un seul axe. Merci à l'avance.
# 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 = [p.x, p.y, p.z, 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)
OriginalL'auteur Barbarossa | 2013-11-06
Vous devez vous connecter pour publier un commentaire.
ummmm il est difficile de dire ce qui est demandé (c'est tout à fait le mur de texte)
peut-être ce que vous demandez
OriginalL'auteur Joran Beasley