根据两个数组的多个条件替换值?

时间:2018-02-23 18:58:54

标签: python numpy

假设我有两个数组

>>> import numpy as np
>>> a = np.random.randint(0, 10, size=(5, 4))
>>> a
array([[1, 6, 7, 4],
       [2, 7, 4, 2],
       [9, 3, 6, 4],
       [9, 6, 8, 2],
       [7, 2, 9, 5]])
>>> b = np.random.randint(0, 10, size=(5, 4))
>>> b
array([[ 5.,  8.,  6.,  5.],
       [ 1.,  8.,  4.,  8.],
       [ 1.,  4.,  6.,  3.],
       [ 4.,  8.,  6.,  4.],
       [ 8.,  7.,  7.,  5.]], dtype=float32)

现在我有一种情况需要比较每个数组的元素并用已知值替换。例如,我的条件是

if a == 0 then replace with 0 (or) if b == 0 then replace with 0
if a > 4 and < 11 then replace with 1 (or) if b > 1 and < 3 then replace with 1
if a > 10 and < 18 then replace with 2 (or) if b > 2 and < 5 then replace with 2
.
.
.
and finally
if a > 40 replace with 9 (or) if b > 9 then replace with 9.

这些被替换的值可以存储在一个新的arrary中,我需要将它用于其他功能。

最简单的元素明智比较形式如a[ a > 2 ] = 1有效。但我不知道用同样的方法进行多次比较(多次)。

我确信在numpy中存在一种我无法找到的简单方法。任何帮助表示赞赏。 如果

1 个答案:

答案 0 :(得分:0)

np.digitize应该做你想做的事。第一个参数是您要替换的值,第二个参数是阈值。

a_replace = np.digitize(a, [0, 4, 10, ..., 40], right=True)
b_replace = np.digitize(b, [0, 1, 2, ..., 9], right=True)