基于多个条件替换numpy数组中的值,而不使用任何循环



我有数组:

x = np.array([1, 41, 32, 2, -8, 0, -97, 11])

如果x[i]>0,x[i]=1

如果x[i]<0,x[i]=-1

如果x[i]==0,x[i]=0

因此预期输出:

x = np.array([1, 1, 1, 1, -1, 0, -1, 1])

有没有一种方法可以在numpy中使用一行代码而不使用任何循环?我想使用np.where,但它只需要2个条件,而我有3个条件。谢谢

您可以将np.select用于多种条件:

np.select([x==0,x>0,x<0],[0,1,-1])
# array([ 1,  1,  1,  1, -1,  0, -1,  1])

或者只在两种情况下,你也可以在适当的地方进行:

x[x>0] = 1
x[x<0] = -1
print(x)
# array([ 1,  1,  1,  1, -1,  0, -1,  1])

虽然这里可能最简单的是np.clip:

np.clip(x,-1,1)
# array([ 1,  1,  1,  1, -1,  0, -1,  1])

实际上它需要3个参数:

x = np.where(x > 0 , x, 1)

最新更新