热线电话:13121318867

登录
2019-01-28 阅读量: 826
如何从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.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]

0.0000
3
关注作者
收藏
评论(0)

发表评论

暂无数据
推荐帖子