首页 > 解决方案 > 具有多个条件的优雅 2D numpy 索引

问题描述

我有一个数字数组,我希望将其转换为虚拟变量(即,如果满足条件,则数组为 1,否则为 0)。但是,条件可能很多,我想知道是否有比我使用的更优雅的解决方案。

arr = np.random.randint(0, 50, size=(100, 100))

# What I'm doing

dummy = np.zeros(arr.shape)
dummy[np.where(np.logical_or.reduce((arr== 10, arr== 15, arr==16, arr==17)))] = 1

在示例中,每个值为 10、15、16 或 17 的值都变为 1,否则变为 0。对于一些虚拟变量,我有 10 多个条件并且表达式可能会变得很长,所以我正在寻找更简洁的东西。我尝试了类似的方法,但得到了 ValueError。

dummy= [1 if x in [10, 15, 16, 17] else 0 for x in arr]

标签: pythonnumpydata-cleaning

解决方案


您可以使用np.select

arr = np.select([arr==10, arr==15,arr==16,arr==17],[1,1,1,1],0)

推荐阅读