如何在numpy中从列表中裁剪到最近的值?

2024-04-18 23:37:20 发布

您现在位置:Python中文网/ 问答频道 /正文

例如,我有一个值数组

[-11, -2, -0.7, -0.2, 0, 0.1, 0.5, 0.9, 2, 7]

我想把它剪辑成0或1,以更接近的为准。或者-1或1(除非实现有任何不同)。你知道吗

我试过了

>>> np.asarray(arr).clip(min=-1, max=1)
array([ 0.1, -1. ,  1. ,  0.5])
>>> np.asarray(arr).clip(-1, 1)
array([ 0.1, -1. ,  1. ,  0.5])
>>> np.asarray(arr).clip(-1, 1)
>>> np.asarray(arr).clip(0, 1)
array([0.1, 0. , 1. , 0.5])

所以它不起作用,因为我期望: [-1, -1, -1, -1, 1, 1, 1, 1, 1, 1]clip(-1, 1)的情况下

以及 [0, 0, 0, 0, 0, 0, 1, 1, 1, 1]clip(0, 1)的情况下

我该怎么做才对?你知道吗


Tags: clip剪辑np情况数组minarraymax
1条回答
网友
1楼 · 发布于 2024-04-18 23:37:20

使用NumPy的^{}的一般解

对于-1到1

arr = np.array([-11, -2, -0.7, -0.2, 0, 0.1, 0.5, 0.9, 2, 7])

clip_left = -1
clip_right = 1

mean = (clip_left + clip_right)/2

arr = np.where(arr<mean, clip_left, clip_right)
print (arr)
# [-1 -1 -1 -1  1  1  1  1  1  1]

对于0到1

arr = np.array([-11, -2, -0.7, -0.2, 0, 0.1, 0.5, 0.9, 2, 7])

clip_left = 0
clip_right = 1

mean = (clip_left + clip_right)/2

arr = np.where(arr<mean, clip_left, clip_right)
print (arr)
# [0 0 0 0 0 0 1 1 1 1]

作为函数

arr = np.array([-11, -2, -0.7, -0.2, 0, 0.1, 0.5, 0.9, 2, 7])

def clip(arr, clip_left, clip_right):
    mean = (clip_left + clip_right)/2
    arr = np.where(arr<mean, clip_left, clip_right)
    return arr

print (clip(arr, -1, 1))
# [-1 -1 -1 -1  1  1  1  1  1  1]

相关问题 更多 >