I have three 2×2 numpy arrays like so:
import numpy as np
#create three arrays
one = np.array([[1, -1],
[-1, 1]])
two = np.array([[-1, 0],
[-2, 2]])
three = np.array([[1, 1],
[-4, 3]])
I want to make a fourth 2×2 array and replace the values based on one
, two
and three
so that if in a particular location all three arrays have values less than one, to make the new value -1, and if all three arrays have values greater than one, to make the new value 1. If the condition is not met I want to turn the values to 0.
I am attempting this like so:
#make a copy of one
final = one.copy()
#where all of the three initial arrays are > 0 make the value 1
final[(one > 0) & (two > 0) & (three >0)] = 1
#where all of the three initial arrays are < 0 make the value -1
final[(one < 0) & (two < 0) & (three <0)] = -1
which returns:
array([[ 1, -1],
[-1, 1]])
So in this case the index at [0,0]
and [0,1]
I want to return zero while [1,0]
should be -1 and [1,1]
should be 1 or this:
[0, 0,
[-1, 1]
I think it is because I am not saying how to change the value to 0 when the original two conditions are not met, and I can’t seem to work out how to do that.
>Solution :
With np.select
for multiple choices on conditions (and default value 0
):
final = np.select([(one > 0) & (two > 0) & (three > 0),
(one < 0) & (two < 0) & (three < 0)], [1, -1])
print(final)
[[ 0 0]
[-1 1]]