我有一组值例如
[-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)
解决办法:
使用NumPy的一般解决方案 where
为-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]








暂无数据