В дальнейшем интервалы представляют собой одномерный массив, данные — это массив произвольной формы, где каждый элемент представляет собой скаляр или массив (чья форма может различаться в зависимости от элементов данных), а f — любая функция. Предполагается, что функция f возвращает скаляр независимо от формы ввода.
Надеюсь, следующий код выражает то, что я пытаюсь сделать.
Код: Выделить всё
out = np.empty(data.shape + bins.shape, np.nan)
for i in np.ndindex(data.shape):
databins = np.searchsorted(bins, data[i])-1
out[i][:] = f(data[i][arrbins == bins[:]])
- Он не позволяет использовать скалярные значения в массиве данных, поскольку они не могут быть проиндексированы.
- В зависимости от функции передача пустого массива может быть разрешена или запрещена. Это нормально, если выходной массив имеет значение nan на случай, если передача пустого массива не разрешена. Поэтому я установил это значение как значение по умолчанию.
- Последняя строка в приведенном выше коде, вероятно, не будет работать из-за проблем с трансляцией. Вместо этого я попробовал следующее, но выдал следующую ошибку: «TypeError: только целочисленные скалярные массивы могут быть преобразованы в скалярный индекс».
Код: Выделить всё
out = np.empty(data.shape + bins.shape, np.nan)
for i in np.ndindex(data.shape):
databins = np.searchsorted(bins, data[i])-1
for j in np.ndindex(bins.shape)
out[i][j] = f(data[i][arrbins == bins[j]])
Подробнее здесь: https://stackoverflow.com/questions/798 ... bin-by-bin
Мобильная версия