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

Python 如何在numpy中从列表中剪裁到最接近的值?,python,numpy,Python,Numpy,例如,我有一个值数组 [-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.

例如,我有一个值数组

[-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)

[0,0,0,0,0,0,0,1,1,1]
如果是
剪辑(0,1)


如何以正确的方式执行此操作?

使用NumPy的通用解决方案

对于-1对1

arr=np.array([-11,-2,-0.7,-0.2,0,0.1,0.5,0.9,2,7])
左夹=-1
右夹=1
平均值=(左剪辑+右剪辑)/2
arr=np.其中(arr
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]
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]