python - 具有多个条件的优雅 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]
解决方案
您可以使用np.select
arr = np.select([arr==10, arr==15,arr==16,arr==17],[1,1,1,1],0)
推荐阅读
- java - 在文件 jsp 中打印属性向量
- vb.net - 如何在visual basic中检查数字是十六进制还是十进制
- google-cloud-platform - 云构建在哪个区域执行其构建?
- cucumber - Cucumber 6.9 java8,无法从 DataTable 转换为自定义类型
- algorithm - Codility CommonPrimeDivisors 时间复杂度?
- c# - 使用 Powershell .Net 方法将 XML 转换为 HTML
- python - Fasttext 自动参数调优训练集
- javascript - React-admin:如何在使用
? - reactjs - 美居码头无法正确配置 CORS 问题
- coordinates - 如何从 st_coordinates 制作的坐标矩阵重建一个 sf 对象?