我需要根据元素出现在其他replacement数组中的条件替换Numpy 2D数组中的元素

例如:

>>> main = np.random.randint(5, size=(3, 4))
>>> main
array([[1, 2, 4, 2],
   [3, 2, 3, 2],
   [4, 4, 2, 3]])
>>> repl = [2,3]
>>> main[main in repl] = -1


我想将repl中的所有值都更改为-1,所以我希望main是:

[[1, -1, 4, -1],
[-1, -1, -1, -1],
[4, 4, -1, -1]]


但是,尝试将ValueError置于替换条件下时会引发in


  ValueError:具有多个元素的数组的真值不明确。使用a.any()或a.all()

最佳答案

我们可以使用np.in1d创建所有此类出现的展平遮罩,并在展平输入中将其设置为-1,如下所示-

main.ravel()[np.in1d(main, repl)] = -1


另外,我们可以使用np.putmask,从而避免使用np.ravel()避免显式展平,如下所示:

np.putmask(main, np.in1d(main, repl), -1)

关于python - 根据另一个数组中的出现替换二维数组中的元素,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40828902/

10-16 05:08