使用 Python 将数组中的负值替换为 0 并将大于 1 的值替换为 1 的最快方法是什么?

Aar*_*and 4 python numpy pandas

我有一个列表(或某种类型的数组),其中几乎所有值都在 0 到 1 之间,但我偶尔会有稍微负数或大于 1 的值。

list_values = [-0.01, 0, 0.5, 0.9, 1.0, 1.01]
Run Code Online (Sandbox Code Playgroud)

我想用 0 替换负数,用 1 替换大于 1 的值。

只有 1 个条件,我会这样使用np.where

arr_values = np.where(pd.Series(list_values) < 0, 0, pd.Series(list_values))
Run Code Online (Sandbox Code Playgroud)

要处理多个条件,我可以定义一个函数,然后使用 lambda 函数应用它:

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))
Run Code Online (Sandbox Code Playgroud)

有没有更快的方法来实现这一点?

jua*_*aga 5

你想使用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. ])
Run Code Online (Sandbox Code Playgroud)

如果您可以忽略转换为数组的成本,这可能是最快的方法。对于较大的列表/数组,应该会好得多。

pandas除非您最终想要一个 Pandas 数据结构,否则参与此操作不是可行的方法。