Как обрезать до ближайшего значения из списка в NumPy? - PullRequest
0 голосов
/ 28 января 2019

У меня есть массив значений, например

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

Как мне сделать это правильно?

1 Ответ

0 голосов
/ 28 января 2019

Общее решение с использованием NumPy's 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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...