Python numpy 多维数组由另一个数组值过滤

Posted

技术标签:

【中文标题】Python numpy 多维数组由另一个数组值过滤【英文标题】:Python numpy multidimensional array filtering by another array values 【发布时间】:2022-01-21 01:22:59 【问题描述】:

我有一个由 7 列和超过 43000 行组成的列表,表示来自 LIDAR 测量的点云的 x、y、z、R、G、B 强度。我想按颜色过滤云,手动隔离一部分。我想消除所有不具有 RGB 组合等于过滤器中存在的那些之一的行。 例如:

Data=[[4,8,12,179,118,74,I1], [5,10,45,142,186,98,I2], [7,14,21,185,193,112,I3], [8,16,24,115,140,43,I3]]

我在第 4、5 和 6 列 (RGB) 上有一个过滤器,如下所示:

Filter=[[179,118,74],[185,193,112]]

作为输出,我想获得一个新列表,其中仅包含满足先决条件的项目(在这种情况下,它们将是第一行和第三行)。 我想要一个这样的新列表:

newlist=[[4,8,12,179,118,74,I1], [7,14,21,185,193,112,I3]]

我没有使用 Python 的经验,所以我不知道从哪里开始。

【问题讨论】:

您能否在代码中显示您想要的输出以及您的尝试? 输入在整个过程中会保持不变吗?还是会在整个程序的运行时间内发生变化? (例如,列表将在某个时间点少 1 个元素或多一个元素) 什么是I1I2 ...?字符串,变量?请包括minimal reproducible example 并说明您是否需要numpy(如您的标题和标签建议)或list 解决方案。 输入是一个 txt 文件,有 7 列和 43000 行,在过滤器中是 3 列和 800 行。一旦初始化,它们直到过滤的那一刻才被使用,当我想消除颜色不在过滤器中的所有行时。就解决方案而言,我更喜欢使用 numpy 但带有列表的也可以。 如果 Datanp.array,则使用 numpyData[np.isin(Data[:,3:6], Filter).all(1)] 【参考方案1】:

在 cmets 中有一个解决方案:

Data[np.isin(Data[:, 3:6], Filter).all(axis=1)]

确实,np.isin 是您解决此类问题的最佳选择。

我敢肯定,如果您在以下列方式之一使用 np.isin 之前减小 DataFilter 的维度,它会更快地工作:

def numpy_dimreduce_ravel(arr, shape):
    return np.ravel_multi_index(arr.T, shape, order='F')

def numpy_dimreduce_dot(arr, shape):
    dim_shape = np.cumprod(np.insert(shape[:-1], 0, 1))
    return np.dot(arr, dim_shape)
Data = np.array([[4,8,12,179,118,74], [5,10,45,142,186,98], [7,14,21,185,193,112], [8,16,24,115,140,43]])
shape = (256, 256, 256)

new_Data = numpy_dimreduce_ravel(data[:,3:6], shape) #[4880051, 6470286, 7389625, 2854003]
# or:
new_Data = numpy_dimreduce_dot(data[:,3:6], shape) #[4880051, 6470286, 7389625, 2854003]
# and:
new_Filter = numpy_dimreduce_ravel(Filter, shape) #[4880051, 7389625]

所以您现在可以以更灵活的方式进行操作:

>>> Data[np.isin(new_data, new_Filter)]
array([[  4,   8,  12, 179, 118,  74],
       [  7,  14,  21, 185, 193, 112]])

【讨论】:

效果很好,非常感谢!

以上是关于Python numpy 多维数组由另一个数组值过滤的主要内容,如果未能解决你的问题,请参考以下文章

42-python中的矩阵多维数组----numpy

Python: 向量矩阵和多维数组(基于NumPy库)

python中的矩阵多维数组----numpy

numpy多维数组元素筛选

numpy多维数组元素筛选

numpy 多维数组的存取