Как усечь значения двумерного массива - PullRequest
6 голосов
/ 13 августа 2011

У меня есть двумерный массив numey (uint16), как я могу усечь все значения выше определенного барьера (скажем, 255) до этого барьера?Другие значения должны оставаться такими же.Использование вложенного цикла кажется неэффективным и неуклюжим.

Ответы [ 3 ]

19 голосов
/ 13 августа 2011

на самом деле есть специальный метод для этого, 'clip':

import numpy as np
my_array = np.array([[100, 200], [300, 400]],np.uint16)
my_array.clip(0,255) # clip(min, max)

output:

array([[100, 200],
       [255, 255]], dtype=uint16)
6 голосов
/ 13 августа 2011

Если ваш вопрос не был связан с битовой глубиной так, как ответ Дж. Бернардо, то более общий способ сделать это будет выглядеть примерно так: (после редактирования мой ответ теперь почти совпадает с его)

def trunc_to( my_array, limit ):
    too_high = my_array > limit
    my_array[too_high] = limit

Здесь хорошая вводная ссылка для индексирования numy bool.

5 голосов
/ 13 августа 2011
import numpy as np
my_array = np.array([[100, 200], [300, 400]],np.uint16)
my_array[my_array > 255] = 255

вывод будет

array([[100, 200],
       [255, 255]], dtype=uint16)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...