[英]What is the fastest way to replace negative values with 0 and values greater than 1 with 1 in an array using Python?
我有一个列表(或某种类型的数组),其中几乎所有的值都在 0 和 1 之间,但我偶尔会有略为负数或大于 1 的值。
list_values = [-0.01, 0, 0.5, 0.9, 1.0, 1.01]
我想用 0 替换负数,用 1 替换大于 1 的值。
只有 1 个条件,我会像这样使用np.where
:
arr_values = np.where(pd.Series(list_values) < 0, 0, pd.Series(list_values))
要处理多个条件,我可以定义一个 function,然后使用 lambda function 应用它:
def change_values(value):
if value < 0:
return 0
elif value > 1:
return 1
else:
return value
series_values = pd.Series(list_values).apply(lambda x: change_values(value=x))
有没有更快的方法来实现这一点?
你想使用np.clip
:
>>> import numpy as np
>>> list_values = [-0.01, 0, 0.5, 0.9, 1.0, 1.01]
>>> arr = np.array(list_values)
>>> np.clip(arr, 0.0, 1.0)
array([0. , 0. , 0.5, 0.9, 1. , 1. ])
如果您可以忽略转换为数组的成本,这可能是最快的方法。 对于较大的列表/数组应该会好很多。
在此操作中涉及pandas
不是通往 go 的方法,除非您最终想要一个 pandas 数据结构。
对于numpy
,这是一项相当容易的任务。
import numpy as np
n = np.array([-0.01, 0, 0.5, 0.9, 1.0, 1.01])
n[n > 1] = 1
n[n < 0] = 0
>>> print(n)
[0. 0. 0.5 0.9 1. 1. ]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.