如何过滤 3D numpy 数组中的多个值

How to filter for multiple values in 3D numpy array

提问人:Datta 提问时间:11/14/2023 最后编辑:Datta 更新时间:11/14/2023 访问量:50

问:

我需要过滤包含脑图像强度值和归一化值、图层标签和分割标签 [大脑区域] 的数据集。例如,如果区域的唯一值为 0、1、2、3、4、5 和 6,则我想删除包含 2 和 4 的行。

我无法显示原始数据集,所以我生成了简化版本以使其清晰[第一列和第二列是图像值,第三列是大脑区域:


import numpy as np
from numpy.random import default_rng

array = np.linspace(0, 6, num = 128)

ls = []

for i in array:

  arr = np.round(i)
  ls.append(arr)

array = np.asanyarray(ls)
array1 = default_rng(42).random((1, 128, 2))

array = array[None, :, None]
arr = np.concatenate((array1, array), axis=2)
# Output example:

array([[[0.77395605, 0.43887844, 0.        ],
        [0.85859792, 0.69736803, 0.        ],
        [0.09417735, 0.97562235, 0.        ],
        [0.7611397 , 0.78606431, 0.        ],
        [0.12811363, 0.45038594, 0.        ],
        [0.37079802, 0.92676499, 0.        ],
        [0.64386512, 0.82276161, 0.        ],
        [0.4434142 , 0.22723872, 0.        ],
        [0.55458479, 0.06381726, 0.        ],
        [0.82763117, 0.6316644 , 0.        ],
        [0.75808774, 0.35452597, 0.        ],
        [0.97069802, 0.89312112, 1.        ],
        [0.7783835 , 0.19463871, 1.        ],
        [0.466721  , 0.04380377, 1.        ],
        [0.15428949, 0.68304895, 1.        ],
        [0.74476216, 0.96750973, 1.        ],
        [0.32582536, 0.37045971, 1.        ],
        [0.46955581, 0.18947136, 1.        ],
        [0.12992151, 0.47570493, 1.        ],
        [0.22690935, 0.66981399, 1.        ],

我尝试通过使用 AND 运算符组合多个条件来过滤数据,但这不是我想要的,因为将来会有更多的区域需要排除。


# constant
profile_length = 128

# filtering
# make array without region 2 and 4
condition = arr[np.where((arr[:, :, 2] != 2) & (arr[:, :, 2] != 4))]

一般来说,我需要一些不需要为进一步条件进行剖析的东西。有什么解决办法吗?

Python Numpy 多维数组 过滤

评论

0赞 rochard4u 11/14/2023
成为您要过滤的值列表怎么样?np.where(arr[:, :, 2] not in filter_list)filter_list
0赞 Datta 11/14/2023
@rochard4u 刚刚尝试了您的解决方案,并发生了 ValueError:“具有多个元素的数组的真值不明确。使用 a.any() 或 a.all()”。

答: 暂无答案