根据python中的逻辑数组设置数组的值

时间:2015-07-27 15:27:09

标签: python arrays numpy set

我有一个数组a=np.array([ -1, 20, 34, 4, 5, -60, -7, 8]),我想以这种方式测试2个条件:p=np.logical_or(a<=5, a>=25)。通过这种方式,我有一个逻辑数组(True-False, 0-1)。 现在我想将满足p的True条件的数组a的值设置为预定义的值,例如NaN。

p
array([ True, False,  True,  True,  True,  True,  True, False], dtype=bool)

我想:

value=array([NaN, 20, NaN, NaN, NaN, NaN, NaN, 8])

我该怎么做?

1 个答案:

答案 0 :(得分:4)

使用numpy.where

>>> np.where((a<=5) | (a>=25), np.nan, a)
array([ nan,  20.,  nan,  nan,  nan,  nan,  nan,   8.])
>>> p = np.logical_or(a<=5, a>=25)
>>> np.where(p, np.nan, a)
array([ nan,  20.,  nan,  nan,  nan,  nan,  nan,   8.])

或使用a创建一个类型为float的新数组,并使用np.nanp指定给其索引:

>>> a_ = a.astype(float)
>>> a_[p] = np.nan
>>> a_
array([ nan,  20.,  nan,  nan,  nan,  nan,  nan,   8.])