python - 如何在numpy数组中应用条件语句?
问题描述
我正在尝试在 numpy 数组中应用条件语句并获取具有 1 和 0 值的布尔数组。
到目前为止,我尝试了 np.where(),但它只允许 3 个参数,就我而言,我还有更多参数。
我首先随机创建数组:
numbers = np.random.uniform(1,100,5)
现在,如果值低于 30,我想得到一个 0。如果值大于 70,我想得到 1。如果值在 30 到 70 之间,我想得到一个随机数介于 0 和 1 之间的数字。如果这个数字大于 0.5,那么数组中的值应该得到 1 作为布尔值,在其他情况下为 0。我想这是用 np.random 函数再次生成的,但我不知道如何应用所有论点。
如果输入数组是:
[10,40,50,60,90]
那么预期的输出应该是:
[0,1,0,1,1]
其中中间的三个值是随机分布的,因此在进行多次测试时它们可能会有所不同。
先感谢您!
解决方案
使用numpy.select
和第三个条件应简化为numpy.random.choice
:
numbers = np.array([10,40,50,60,90])
print (numbers)
[10 40 50 60 90]
a = np.select([numbers < 30, numbers > 70], [0, 1], np.random.choice([1,0], size=len(numbers)))
print (a)
[0 0 1 0 1]
如果需要3rd
比较条件,0.5
可以将掩码转换为整数以True, False
进行1, 0
映射:
b = (np.random.rand(len(numbers)) > .5).astype(int)
#alternative
#b = np.where(np.random.rand(len(numbers)) > .5, 1, 0)
a = np.select([numbers < 30, numbers > 70], [0, 1], b)
或者您可以链接 3 次numpy.where
:
a = np.where(numbers < 30, 0,
np.where(numbers > 70, 1,
np.where(np.random.rand(len(numbers)) > .5, 1, 0)))
或使用np.select
:
a = np.select([numbers < 30, numbers > 70, np.random.rand(len(numbers)) > .5],
[0, 1, 1], 0)
推荐阅读
- go - 如何从 pkcs#7 文件加载证书?
- python - 如何将大量 .WAV 文件转换为单个 .CSV 文件
- azure - Azure Monitor 日志 - 虚拟机规模集指标
- mongodb - MongoDB:如何查找日期格式为字符串的文档 2021-04-04 12:40:05
- splunk - 将数据获取到 Hyperledger Fabric 的 Splunk 应用程序的问题
- javascript - Css滚动捕捉在N处开始可见元素
- .net - 校长代表什么
- javascript - 反应安装问题,没有生成node_modules
- html - 当另一个特定的 NESTED 元素位于前面时,如何不选择一个元素?
- javascript - MongoDB在聚合的最后阶段获取字段总和