重置不满足指定条件的值
Resetting the values that do not meet the specified condition
比如说,我有一个 numpy 数组 x = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
和两个变量,即 min = 3
和 max = 7
。当 x
值超出 min
和 max
变量指定的范围时,将 x
值设置为 0
的最有效方法是什么,即 >3 && <7
,所以最终结果将是 x_after = [0, 0, 0, 3, 4, 5, 6, 7, 0, 0]
?
您可以为此使用 numpy.where
:
>>> x = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> np.where(np.logical_or(x<3, x>7), 0, x)
array([0, 0, 0, 3, 4, 5, 6, 7, 0, 0])
#or without `np.logical_or` call.
>>> np.where((x < 3) | (x > 7), 0, x)
array([0, 0, 0, 3, 4, 5, 6, 7, 0, 0]
由于您用 numpy
标记了问题,这里是一个 NumPy 解决方案:
In [19]: x = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
In [20]: min_val, max_val = 3, 7
In [21]: x[(x < min_val) | (x > max_val)] = 0
In [22]: x
Out[22]: array([0, 0, 0, 3, 4, 5, 6, 7, 0, 0])
这会就地修改数组;如果需要,制作副本很容易。
比如说,我有一个 numpy 数组 x = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
和两个变量,即 min = 3
和 max = 7
。当 x
值超出 min
和 max
变量指定的范围时,将 x
值设置为 0
的最有效方法是什么,即 >3 && <7
,所以最终结果将是 x_after = [0, 0, 0, 3, 4, 5, 6, 7, 0, 0]
?
您可以为此使用 numpy.where
:
>>> x = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> np.where(np.logical_or(x<3, x>7), 0, x)
array([0, 0, 0, 3, 4, 5, 6, 7, 0, 0])
#or without `np.logical_or` call.
>>> np.where((x < 3) | (x > 7), 0, x)
array([0, 0, 0, 3, 4, 5, 6, 7, 0, 0]
由于您用 numpy
标记了问题,这里是一个 NumPy 解决方案:
In [19]: x = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
In [20]: min_val, max_val = 3, 7
In [21]: x[(x < min_val) | (x > max_val)] = 0
In [22]: x
Out[22]: array([0, 0, 0, 3, 4, 5, 6, 7, 0, 0])
这会就地修改数组;如果需要,制作副本很容易。