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

Using Python numpy where condition to change entires below a certain value

这是我的数组:

import numpy as np
a = np.array([0, 5.0, 0, 5.0, 5.0])

是否有可能以某种方式使用 numpy.where 将值 x 添加到 a 中小于 l 的所有整数?

所以像这样:

a = a[np.where(a < 5).add(2.5)]

应该return:

array([2.5, 5.0, 2.5, 5.0, 5.0])

您可以使用 np.where 创建 additions 的数组,然后简单地添加到 a -

a + np.where(a < l, 2.5,0)

样本运行-

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. ])
a += np.where(a < 1, 2.5, 0)

where 将 return 满足条件(第一个参数)的第二个参数,否则第三个参数。

a = np.array([0., 5., 0., 5., 5.])
a[np.where(a < 5)] += 2.5

如果您真的想使用 where 或只是

a[a < 5] += 2.5

我经常用它来进行这类操作。

您可以使用 "masked array" 作为索引。布尔运算,比如a < 1return这样的数组。

>>> a<1
array([False, False, False, False, False], dtype=bool)

您可以将其用作

>>> a[a<1] += 1

a<1部分只选择a中符合条件的项目。才可以对这部分进行操作。

如果您想保留您的选择,可以分两步进行。

>>> mask = a>1
>>> a[mask] += 1

另外,您可以统计符合条件的项目:

>>> print np.sum(mask)

鉴于您可能需要更改 dtype(从 intfloat),您需要创建一个新数组。没有显式 .astypenp.where 调用的简单方法是与掩码相乘:

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

with np.where 这可以更改为一个简单的表达式(使用 else-条件,第三个参数,在 where 中):

>>> a = np.where(a < 5, a + 2.5, a)
>>> a
array([ 2.5,  5. ,  2.5,  5. ,  5. ])