Необычное назначение индексации NumPy: возможно ли указать редуктор для перекрывающихся целей? - PullRequest
0 голосов
/ 06 июля 2019

Я хотел бы использовать NumPy для копирования данных из набора буферов в возможно перекрывающиеся местоположения в целевом массиве. Отображение определяется массивом целевых индексов. Я хотел бы настроить поведение, когда целевые индексы перекрываются. Вот пример:

  • buffers - форма (48,15), каждое местоположение является «пикселем» между 0-1.
  • output - форма (600,). 1-D массив значений пикселей.
  • buffer_mappings - форма (48,15). Каждый buffer_mappings[i,j] предоставляет скалярный индекс k, указывающий, что buffers[i,j] должен быть нарисован в местоположении output[k].

В настоящее время я использую необычную индексацию следующим образом.

output[buffer_mappings] = buffers

Проблема возникает, когда несколько входов из buffers отображаются в одно и то же местоположение output. Необычное индексирование будет использовать только последнее входное значение для данного местоположения. Как я могу предоставить редуктор, скажем max или avg, когда это произойдет? Смотрите желаемое поведение:

illustration

Может быть, это невозможно при использовании необычной индексации; Я открыт и для других подходов.

1 Ответ

1 голос
/ 06 июля 2019

Спасибо hpaulj за указатель на ufunc.at! Следующие работы для накопления "max":

output = np.zeros(600)
np.maximum.at(output, buffer_mappings, buffers)

Чтобы усреднить перекрывающиеся значения, я думаю, что это будет работать:

output = np.zeros(600)
np.add.at(output, buffer_mappings, buffers)
counts = np.bincount(buffer_mappings.ravel(), minlength=600)
np.divide(output, counts, out=output, where=counts!=0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...