繁体   English   中英

如何在没有if语句的情况下在python中设置阈值(如果低于阈值则为零,如果高于阈值则为零)

[英]How to threshold values in python without if statement (to zero if below threshold, same if above)

我想进行内联比较而不用Python编写“ If语句”。 如果该值满足阈值条件,则应保持不变。 如果不是,则该值应设置为0。

在Python中,似乎不允许直接将布尔运算符应用于列表。 在Matlab中,在数组运算中,“ True”给出“ 1”而“ False”给出零是很方便的。 这类似于matlab,但无法在python中工作(也许使用numpy吗?)。 伪代码示例:

a = [1.5, 1.3, -1.4, -1.2]
a_test_positive = a>0 # Gives [1, 1, 0, 0]
positive_a_only = a.*a>0 

所需结果:

positive_a_only>> [1.5, 1.3, 0, 0]

在python中执行此操作的最佳方法是什么?

你需要 -

a = [1.5, 1.3, -1.4, -1.2]
positive_a_only = [i if i>0 else 0 for i in a]

print(positive_a_only)

产量

[1.5, 1.3, 0, 0]

根据您的输入和预期输出,这称为列表理解 。这是一种“ pythonic”方式

列表理解为创建列表提供了一种简洁的方法。 常见的应用是创建新列表,其中每个元素是应用于另一个序列的每个成员或可迭代的某些操作的结果,或者创建满足特定条件的那些元素的子序列。

您的用例就是为此而设计的:)

如果要使用数值数组,可能值得看一下Numpy

import numpy as np

a = np.array([1.5, 1.3, -1.4, -1.2])
a[a < 0] = 0
# [ 1.5  1.3  0.   0. ]

到目前为止,我发现的最佳答案是使用python运算符作为阈值或比较逻辑来枚举并循环遍历数组。

关键是将索引元素乘以逻辑比较。 例如

a = 1.5
a_positive = a * (a>0)
print(a)

按预期返回值1.5,如果a为负,则返回0。

这是带有完整列表的示例:

a = [1.5, 1.3 -1.4, -1.2]
for i, element in enumerate(a):
     a[i] = element*(element>0)

print(a)
[1.5, -0.0, -0.0]

希望能对某人有所帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM