scipy 如何通过索引列表过滤numpy数组?

x9ybnkn6  于 2022-11-10  发布在  其他
关注(0)|答案(5)|浏览(185)

我有一个numpy数组filtered__rows,由LAS数据[x, y, z, intensity, classification]组成。我创建了一个点的cKDTree,并找到了最近邻query_ball_point,它是该点及其邻点的索引列表。
是否有办法过滤filtered__rows,以创建一个仅包含其索引在query_ball_point返回的列表中的点的数组?

gfttwv5a

gfttwv5a1#

看起来您只需要一个基本的整数数组索引:

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

4bbkushb2#

numpy.take对于多维阵列是有用的并且工作良好。

import numpy as np

filter_indices = [1, 2]
array = np.array([[1, 2, 3, 4, 5], 
                  [10, 20, 30, 40, 50], 
                  [100, 200, 300, 400, 500]])

axis = 0
print(np.take(array, filter_indices, axis))

# [[ 10  20  30  40  50]

# [100 200 300 400 500]]

axis = 1
print(np.take(array, filter_indices, axis))

# [[  2   3]

# [ 20  30]

# [200 300]]
wfsdck30

wfsdck303#

使用Docs:https://docs.scipy.org/doc/numpy-1.13.0/user/basics.indexing.html下面的实现应该适用于某个numpy ndarray的任意数量的维度/形状。
首先,我们需要一组多维索引和一些示例数据:

import numpy as np
y = np.arange(35).reshape(5,7)
print(y) 
indexlist = [[0,1], [0,2], [3,3]]
print ('indexlist:', indexlist)

要真正提取直观结果,技巧是使用转置:

indexlisttranspose = np.array(indexlist).T.tolist()
print ('indexlist.T:', indexlisttranspose)
print ('y[indexlist.T]:', y[ tuple(indexlisttranspose) ])

进行以下终端输出:

y: [[ 0  1  2  3  4  5  6]
 [ 7  8  9 10 11 12 13]
 [14 15 16 17 18 19 20]
 [21 22 23 24 25 26 27]
 [28 29 30 31 32 33 34]]
indexlist: [[0, 1], [0, 2], [3, 3]]
indexlist.T: [[0, 0, 3], [1, 2, 3]]
y[indexlist.T]: [ 1  2 24]

元组...修复了一个未来的警告,我们可以像这样引起:
第一个

lfapxunr

lfapxunr4#

你知道多维数组的意思吗?
通过为每个索引提供一个1d数组,可以将其扩展为多维数组,因此对于2d数组

filter_indices=np.array([[1,0],[0,1]])
array=np.array([[0,1],[1,2]])
print(array[filter_indices[:,0],filter_indices[:,1]])

将为您提供:[1,1]
Scipy解释了如果您调用以下命令会发生什么情况:print(array[filter_indices])
文件-https://docs.scipy.org/doc/numpy-1.13.0/user/basics.indexing.html

q35jwt9p

q35jwt9p5#

最快的方法是X[tuple(index.T)],其中X是包含元素的ndarray,index是希望检索的索引的ndarray。

相关问题