python - 如何在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]])
它基于条件逻辑而不是数学公式
解决方案
如果数组值不一定介于 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)
它不关心条件的顺序
推荐阅读
- java - 为什么迭代器会为整数链表抛出异常
- javascript - 我应该如何格式化数据
- html - 如何使无序列表居中
- python - 发生异常:OSError 无法加载共享对象文件:llvmlite.dll
- apache-kafka - apache kafka vs redis 作为生产中的消息代理
- maven - talend 7.3.1 如何将 jdbc 或 sqlserver 支持添加到路由?
- mysql - 数据库连接适用于 Kubernetes 集群,但使用 Skaffold 开发失败
- r - ggplot, geom_line() 用于数据集中字符串(分类)变量的每个值的平均出现次数
- python - Django rest框架:嵌套序列化程序为空时排除结果
- express-validator - 自定义验证器 - 何时使用 Promise.reject() 与 throw new Error()?