Home > Mobile >  Mask NumPy array and extract values where condition is met
Mask NumPy array and extract values where condition is met

Time:06-07

How can I mask two NumPy arrays properly? I want find pe values that are not equal to 255, for example. I also want my desired output array be the same size aspd and pe, i.e., (7, 7) and filled with 0's.
What is the most efficient way to achieve this?

import numpy as np

pd = np.random.randint(254,256, size=(7,7))
pe = np.random.randint(0,7, size=(7,7))

Desired output

[[6 6 0 0 6 6 1]
 [2 6 1 1 5 6 3]
 [3 4 6 6 3 5 6]
 [3 5 0 3 2 0 0]
 [0 3 6 1 3 6 1]
 [6 3 4 1 0 3 1]
 [6 0 4 2 2 6 4]]

Many thanks

CodePudding user response:

Logical indexing seems the simplest of all options.

import numpy as np

pd = np.random.randint(254,256, size=(7,7))
pe = np.random.randint(0,7, size=(7,7))

pe[pd == 255] = 0

[[3 6 0 2 0 0 0]
 [0 3 4 5 2 0 5]
 [0 0 6 0 1 0 5]
 [0 3 0 4 0 6 0]
 [2 0 0 0 0 0 0]
 [2 0 4 0 0 0 5]
 [0 0 3 0 2 4 0]]

Based on your data size, you may try other options:

pe = np.where(pd == 255, 0, pe)
# OR
pe = pe * (pd == 255)

but I guess indexing is still simple and fast.

  • Related