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

时间:2018-03-01 07:25:48

标签: python arrays operators threshold

我想在没有在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中执行此操作的最佳方法是什么?

3 个答案:

答案 0 :(得分:3)

你需要 -

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]

这被称为List Comprehension 根据您的输入和预期输出,这是一种“pythonic”方式来做到这一点

  

列表推导提供了创建列表的简明方法。共同   应用程序将创建新列表,其中每个元素都是结果   一些操作应用于另一个序列的每个成员或   可迭代的,或创建满足a的元素的子序列   某种条件。

你的用例是为此做的:)

答案 1 :(得分:1)

如果您正在处理数值数组,可能值得查看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. ]

答案 2 :(得分:0)

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

关键是将索引元素乘以逻辑比较。 e.g。

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]

希望能帮助别人!