Как вернуть несколько значений, используя scipy ndimage.generic_filter в Python?
Я ищу способ вывода нескольких значений с помощью модуля generic_filter в scipy.ndimage, например, так:
import numpy as np
from scipy import ndimage
a = np.array([range(1,5),range(5,9),range(9,13),range(13,17)])
def summary(a):
minVal = np.min(a)
maxVal = np.max(a)
return [minVal,maxVal]
[arrMin, arrMax] = ndimage.generic_filter(a, summary, footprint=np.ones((3,3)))
Но я продолжаю получать ошибку, что ожидается плавание.
Я играл с параметром "output", вот так:
arrMin = np.zeros(np.shape(a))
arrMax = np.zeros(np.shape(a))
ndimage.generic_filter(a, summary, footprint=np.ones((3,3)), output = [arrMin, arrMax])
но безрезультатно. Я также попытался вернуть именованный кортеж, класс или словарь, согласно этому вопросу, ни один из которых не работал.
1 ответ
Основываясь на комментариях, вы хотите выполнить несколько фильтров одновременно, а не выполнять их по отдельности.
К сожалению, я не думаю, что этот фильтр работает таким образом. Ожидается, что вы вернете одно отфильтрованное выходное значение для каждого соответствующего входного значения. Я искал способ сделать одновременные фильтры с numpy / scipy, но ничего не смог найти.
Если вы можете управлять потоком данных, который позволяет загружать изображение, фильтровать, обрабатывать и выводить небольшие данные результатов в отдельных параллельных путях (по одному для каждого фильтра), то вы можете получить некоторую выгоду от использования multiprocessing
но если вы используете это наивно, это может занять больше времени, чем делать все последовательно. Если у вас действительно есть узкое место, которое решает многопроцессорная обработка, вам также следует рассмотреть возможность совместного использования входного массива, а не загрузки его в каждом процессе.