如何获得数组中某些元素的零值?

时间:2019-01-08 07:50:48

标签: python numpy

我的输出数组如下所示。然后,我想使所有元素的值为零,它们之间的值在(0.75 to 1.06) (0,75 > output > 1.06)之间。

array([2.        , 1.72787724, 1.45575448, 1.18363171, 0.91150895,
       0.63938619, 0.36726343, 0.09514066, 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.        , 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.        , 0.        , 0.        ,
       0.        , 0.        , 0.        , 0.        , 0.12235294,
       0.43529412, 0.74823529, 1.06117647, 1.37411765, 1.68705882,
       2.        ])

我尝试了np.where(0.75 >output >1.06,0,1),但不起作用:

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

请帮助我解决此类问题。

谢谢。

2 个答案:

答案 0 :(得分:0)

您可以使用内置在逻辑运算符中的numpys来执行此操作。 试试:np.logical_and(np.where(output > 0.75), np.where(output < 1.06))

答案 1 :(得分:0)

您可以使用np.vectorize将函数应用于数组的元素,例如:

a = np.array([[-9,-7,-3],[-1,9,3],[1,4,10]])
def func(x):
    if -5<x<5:
        return 0
    else:
        return x
vfunc = np.vectorize(func)
b = vfunc(a)
print(b)

输出

[[-9 -7  0]
 [ 0  9  0]
 [ 0  0 10]]