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

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

我想在 Python 中不写 'If statements' 进行内联比较。如果该值满足阈值条件,则应保持不变。如果不是,则该值应设置为 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 中执行此操作的最佳方法是什么?

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

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

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

Returns 1.5 的值符合预期,如果 a 为负数,则 returns 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]

希望对某人有所帮助!

你需要 -

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" 方法

List comprehensions provide a concise way to create lists. Common applications are to make new lists where each element is the result of some operations applied to each member of another sequence or iterable, or to create a subsequence of those elements that satisfy a certain condition.

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

如果您正在使用数值数组,可能值得一看 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. ]