使用Python numpy where条件更改低于某个值的entires

使用Python numpy where条件更改低于某个值的entires,python,arrays,numpy,where,Python,Arrays,Numpy,Where,这是我的阵列: import numpy as np a = np.array([0, 5.0, 0, 5.0, 5.0]) 是否可以使用numpy.where以某种方式向a中小于l的所有实体添加值x 比如: a = a[np.where(a < 5).add(2.5)] 您可以使用创建添加的数组,然后简单地添加到a- a + np.where(a < l, 2.5,0) a+np.其中(a

这是我的阵列:

import numpy as np
a = np.array([0, 5.0, 0, 5.0, 5.0])
是否可以使用
numpy.where
以某种方式向
a
中小于
l
的所有实体添加值
x

比如:

a = a[np.where(a < 5).add(2.5)]
您可以使用创建添加的数组,然后简单地添加到
a
-

a + np.where(a < l, 2.5,0)
a+np.其中(a
样本运行-

In [16]: a = np.array([1, 5, 4, 5, 5])

In [17]: l = 5

In [18]: a + np.where(a < l, 2.5,0)
Out[18]: array([ 3.5,  5. ,  6.5,  5. ,  5. ])
[16]中的
:a=np.array([1,5,4,5,5])
在[17]中:l=5
[18]中:a+np.式中(a
a+=np.其中(a<1,2.5,0)
其中
将在满足条件(第一个参数)的情况下返回第二个参数,否则返回第三个参数

a = np.array([0., 5., 0., 5., 5.])
a[np.where(a < 5)] += 2.5
我通常用于此类操作。

您可以使用“屏蔽数组”作为索引。布尔运算,例如
a<1
返回这样的数组

>>> a<1
array([False, False, False, False, False], dtype=bool)
此外,您还可以计算符合条件的项目:

>>> print np.sum(mask)

考虑到您可能需要更改数据类型(从
int
更改为
float
),您需要创建一个新数组。无显式
.astype
np的简单方法。其中
调用是与掩码相乘:

>>> b = a + (a < 5) * 2.5
>>> b
array([ 2.5,  5. ,  2.5,  5. ,  5. ])

我只是想强调一下,如果数据类型差异太大(
int
+=
float
),不允许进行适当的添加,这是唯一有效的答案(我的答案除外:-)。感谢您指出该类型的错误。它应该是浮动的。@AnthonyW这就是为什么我们在发布问题时谈论
representative
sample:)
>>> a<1
array([False, False, False, False, False], dtype=bool)
>>> a[a<1] += 1
>>> mask = a>1
>>> a[mask] += 1
>>> print np.sum(mask)
>>> b = a + (a < 5) * 2.5
>>> b
array([ 2.5,  5. ,  2.5,  5. ,  5. ])
>>> a = np.where(a < 5, a + 2.5, a)
>>> a
array([ 2.5,  5. ,  2.5,  5. ,  5. ])