首页 > 解决方案 > 两侧的numpy掩码数组

问题描述

假设一个numpy数组x。我该怎么办x[x>value] = max(value1, x[x>value])

换句话说,如果元素x[i] > value,那么x[i] = max(value1, x[i])

谢谢。

编辑 使用numpy.maximum而不是numpy.max解决问题。当我numpy.max收到错误消息时TypeError: only integer scalar arrays can be converted to a scalar index

标签: pythonarraysnumpy

解决方案


做一个数组:

In [361]: x = np.random.randint(0,10,10)
In [362]: x
Out[362]: array([7, 8, 4, 8, 1, 2, 6, 6, 3, 9])

确定要替换的值:

In [363]: mask = x>5
In [364]: mask
Out[364]: 
array([ True,  True, False,  True, False, False,  True,  True, False,
        True])
In [365]: x[mask]
Out[365]: array([7, 8, 8, 6, 6, 9])

替换值:

In [368]: np.maximum(7, x[mask])
Out[368]: array([7, 8, 8, 7, 7, 9])

只要双方的项数相同(shape实际上):

In [369]: x[mask] = np.maximum(7, x[mask])
In [370]: x
Out[370]: array([7, 8, 4, 8, 1, 2, 7, 7, 3, 9])

由于这实际上只是在 5 和 7 之间更改值,我们可以使用:

In [378]: x = np.array([7, 8, 4, 8, 1, 2, 6, 6, 3, 9])
In [379]: mask = (x>5) & (x<7)
In [380]: mask
Out[380]: 
array([False, False, False, False, False, False,  True,  True, False,
       False])
In [381]: x[mask]
Out[381]: array([6, 6])
In [382]: x[mask] = 7

推荐阅读