Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Unable to retrieve required indices from multiple NumPy arrays

I have 4 numpy arrays of same shape(i.e., 2d). I have to know the index of the last array (d) where the elements of d are smaller than 20, but those indices of d should be located in the region where elements of array(a) are 1; and the elements of array (b) and (c) are not 1.

I tried as follows:

mask = (a == 1)|(b != 1)|(c != 1)

answer = d[mask | d < 20]

Now, I have to set those regions of d into 1; and all other regions of d into 0.

d[answer] = 1
d[d!=1] = 0
print d

I could not solve this problem. How do you solve it?

import numpy as np

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

b = np.array([[0,0,0,1,1,0,0,0,0,0,0],
                 [0,0,0,0,0,0,1,1,0,0,0],
                 [0,0,0,1,0,1,0,0,0,0,0],
                 [0,0,0,1,1,1,0,1,0,0,0],
                 [0,0,0,0,0,0,1,0,0,0,0],
                 [0,0,0,0,1,0,1,0,0,0,0]])

c = np.array([[0,0,0,0,0,0,1,0,0,0,0],
                 [0,0,0,0,0,0,0,0,0,0,0],
                 [0,0,0,0,0,0,1,1,0,0,0],
                 [0,0,0,0,0,0,1,0,0,0,0],
                 [0,0,0,0,1,0,0,0,0,0,0],
                 [0,0,0,0,0,1,0,0,0,0,0]])


d = np.array([[0,56,89,67,12,28,11,12,14,8,240],
                 [1,57,89,67,18,25,11,12,14,9,230],
                 [4,51,89,87,19,20,51,92,54,7,210],
                 [6,46,89,67,51,35,11,12,14,6,200],
                 [8,36,89,97,43,67,81,42,14,1,220],
                 [9,16,89,67,49,97,11,12,14,2,255]])
like image 253
Borys Avatar asked Dec 07 '25 22:12

Borys


1 Answers

The conditions should be AND-ed together, instead of OR-ed. You can first get the Boolean array / mask representing desired region, and then modify d based on it:

mask = (a == 1) & (b != 1) & (c != 1) & (d < 20)
d[mask] = 1
d[~mask] = 0
print d

Output:

[[0 0 0 0 0 0 0 1 0 0 0]
 [0 0 0 0 1 0 0 0 0 0 0]
 [0 0 0 0 1 0 0 0 0 0 0]
 [0 0 0 0 0 0 0 0 0 0 0]
 [0 0 0 0 0 0 0 0 0 0 0]
 [0 0 0 0 0 0 0 1 0 0 0]]
like image 62
YS-L Avatar answered Dec 09 '25 13:12

YS-L



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!