Arhn - архитектура программирования

Как добавить значение по определенным индексам в массив numpy с отсечением min/max?

Я пытаюсь добавить скалярное значение по определенным индексам в массив numpy, который имеет тип numpy.uint8. Есть ли способ убедиться, что сложение обрезается до определенного максимума, чтобы сумма не переполнялась? Вот как этого добиться с помощью цикла for, но это медленно и неэффективно. Есть ли способ использовать np.add.at или другую функцию, чтобы сделать это быстрее?

change_by = 80
indices = [(0,0), (100, 100), (23, 45)]

for idx in indices:
    output_image[idx[0], idx[1]] = min(255, image[idx[0], idx[1]] + change_by)

Это ограничивает максимальное значение для каждого элемента равным 255. Есть ли более эффективный способ добиться этого? Спасибо!



Ответы:


1

Попробуйте np.clip() Что-то вроде

import numpy as np
array = np.array([-10,0,1,2,100,200,300])
min = 0
max = 255
np.clip(array, min, max)

https://numpy.org/doc/stable/reference/generated/numpy.clip.html

Если вам нужно работать с uint8 и добавить перед клипом:

>>> import numpy as np
>>> a = np.array(range(10),dtype=np.uint8)
>>> a
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], dtype=uint8)
>>> np.array(a+250,dtype=np.uint8)
array([250, 251, 252, 253, 254, 255,   0,   1,   2,   3], dtype=uint8)

Это тип проблемы, которую вы видите? Попробуйте это, может быть:

>>> np.array(np.clip(a.astype(np.int)+250,0,255),dtype=np.uint8)
array([250, 251, 252, 253, 254, 255, 255, 255, 255, 255], dtype=uint8)
11.11.2020
  • Спасибо, но проблема в том, что мой тип данных uint8, и после использования np.add.at сумма уже превысила 255. Поэтому я не могу обрезать постфактум. Могу ли я сделать отсечение в самом добавлении, как я делаю это в цикле? Я обновил вопрос с этой деталью 11.11.2020
  • @deepaktalwardt мой обновленный пример решает проблему? Если это так, я был бы признателен, если бы это было принято, поскольку я пытаюсь создать свою репутацию. 16.11.2020
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..