我有三个2x2的numpy数组如下:
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]])
我想创建第四个2x2数组,并替换基于one
、two
和three
的值,以便如果在特定位置,所有三个数组的值都小于1,则使新值为-1,如果所有三个数组的值都大于1,则使新值为1。如果不满足条件,我想将值设为0。
我尝试这样做:
#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
其返回:
array([[ 1, -1],
[-1, 1]])
所以在这种情况下,在[0,0]
和[0,1]
的索引我想返回零,而[1,0]
应该是-1和[1,1]
应该是1或这样:
[0, 0,
[-1, 1]
我认为这是因为我没有说如何在不满足最初的两个条件时将值更改为0,而且我似乎无法解决如何做到这一点。
3条答案
按热度按时间xeufq47z1#
您的初始化不正确,您应该设置零而不是“一”的值:
输出:
类似于Roman的替代方法,但使用
dstack
和all
将比较推广到任意数量的输入数组:zqdjd7g92#
使用
np.select
可在条件上进行多项选择(默认值为0
):tp5buhyn3#
另一种可能的解决方案:
或者:
输出: