繁体   English   中英

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

[英]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.

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