首页 > 解决方案 > 如何在numpy中实现多个ifelse

问题描述

我有一个这样的数组,需要用 2 替换每 1,用 4 替换每 3,用 1 替换每 4。有没有办法只用 np 而不是循环来做到这一点?

import numpy as np
np.random.seed(2)
arr=np.random.randint(1,5,(3,3),int)
arr

array([[1, 4, 2],
       [1, 3, 4],
       [3, 4, 1]])

如果我按顺序使用数组掩码,它不会给出预期的结果:

array([[2, 1, 2], 
       [2, 4, 1],
       [4, 1, 2]]) 

它基于条件逻辑而不是数学公式

标签: pythonnumpyif-statementnumpy-ndarray

解决方案


如果数组值不一定介于 1 和 4 之间,您可以使用np.select

import numpy as np

a = np.random.randint(1,5, (3,3))


condlist = [np.logical_or(a==1, a==2),  a==3, a==4]
choicelist= [2, 4, 1]
b = np.select(condlist, choicelist) 

它不关心条件的顺序


推荐阅读