Operating with masked matrices

import numpy as np np.random.seed(10) A = np.random.randint(0, 30, 30).reshape(5,6) mask1 = np.ma.array(A, mask=A > 15) mask2 = np.ma.array(A, mask=A % 5) masks_sum = mask1 + mask2 masks_intersection = mask1 | mask2 """ Using positions to construct a mask (for reference only) x, y = np.ma.where(A > 15) m = np.zeros(A.shape) for x, y in zip(x,y): m[x,y] = 1 masked = np.ma.array(A, mask=m) """ print('Matrix A:') print(A) print('Mask 1 (A > 15):') print(mask1) print('Mask 2 (A % 5):') print(mask2) print('Sum of the masks:') print(masks_sum) print('Intersection of the masks:') print(masks_intersection) print('Invert last mask:') intmask = np.ma.getmask(masks_intersection) inverted_mask = np.invert(intmask) print(np.ma.array(A, mask = inverted_mask)) print('Show anomalies:') print(np.ma.anom(A, dtype=int)) """ Matrix A: [[ 9 29 4 15 0 17] [27 28 25 29 16 29] [17 26 8 9 0 10] [ 8 22 4 19 16 4] [15 11 22 24 11 26]] Mask 1 (A > 15): [[9 -- 4 15 0 --] [-- -- -- -- -- --] [-- -- 8 9 0 10] [8 -- 4 -- -- 4] [15 11 -- -- 11 --]] Mask 2 (A % 5): [[-- -- -- 15 0 --] [-- -- 25 -- -- --] [-- -- -- -- 0 10] [-- -- -- -- -- --] [15 -- -- -- -- --]] Sum of the masks: [[-- -- -- 30 0 --] [-- -- -- -- -- --] [-- -- -- -- 0 20] [-- -- -- -- -- --] [30 -- -- -- -- --]] Intersection of the masks: [[-- -- -- 15 0 --] [-- -- -- -- -- --] [-- -- -- -- 0 10] [-- -- -- -- -- --] [15 -- -- -- -- --]] Invert last mask: [[9 29 4 -- -- 17] [27 28 25 29 16 29] [17 26 8 9 -- --] [8 22 4 19 16 4] [-- 11 22 24 11 26]] Show anomalies: [[ -7 13 -12 -1 -16 1] [ 11 12 9 13 0 13] [ 1 10 -8 -7 -16 -6] [ -8 6 -12 3 0 -12] [ -1 -5 6 8 -5 10]] """