如何仅获得掩盖的数据而不将数据展平为一维数组?也就是说,假设我有一个numpy数组

a = np.array([[0, 1, 2, 3],
              [0, 1, 2, 3],
              [0, 1, 2, 3]])


我遮盖了所有大于1的元素

b = ma.masked_greater(a, 1)

masked_array(data =
 [[0 1 -- --]
 [0 1 -- --]
 [0 1 -- --]],
             mask =
 [[False False  True  True]
 [False False  True  True]
 [False False  True  True]],
       fill_value = 999999)


如何仅获得被遮罩的元素而不使输出变平?也就是说,我需要

array([[ 2, 3],
       [2, 3],
       [2, 3]])

最佳答案

将两个列表压缩在一起,然后将它们过滤掉:

data = [[0, 1, 1, 1], [0, 1, 1, 1], [0, 1, 1, 1]]

mask = [[False, False,  True,  True],
 [False, False,  True,  True],
 [False, False,  True,  True]]

zipped = zip(data, mask) # [([0, 1, 1, 1], [False, False, True, True]), ([0, 1, 1, 1], [False, False, True, True]), ([0, 1, 1, 1], [False, False, True, True])]

masked = []
for lst, mask in zipped:
    pairs = zip(lst, mask)  # [(0, False), (1, False), (1, True), (1, True)]
    masked.append([num for num, b in pairs if b])

print(masked)  # [[1, 1], [1, 1], [1, 1]]


或更简洁地:

zipped = [...]
masked = [[num for num, b in zip(lst, mask) if b] for lst, mask in zipped]
print(masked)  # [[1, 1], [1, 1], [1, 1]]

关于python - python numpy获取蒙版数据而无需展平,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34468436/

10-12 16:35
查看更多