Мне нужно оценить каждый элемент матрицы, используя функцию с числовым интегралом (scipy.integrate.quad). Элементами матрицы являются пиксели серого изображения размером 5202 x 3465.
У меня есть доступ к графическому процессору, и я хотел бы параллельно оценивать как можно больше элементов, потому что прямо сейчас, при линейном программировании, все вычисления занимают более 24 часа.
Вот пример кода:
for i in range(0, rows):
for j in range(0, columns):
img[i, j] = myFun(constant_args, i, j)
def myFunc(constant_args, i, j):
new_pixel = quad(integrand, constant_args, i, j)
... other calculations ...
return new_pixel
Я пытался использовать многопроцессорность (как mp) следующим образом:
arows = list(range(0, rows))
acolumns = list(range(0, columns))
with mp.Pool() as pool:
img = pool.map(myFunc, (constant_args, arows, acolumns))
или с img = pool.map(myFunc(constant_args), (стрелки, столбцы))
но это дает мне:
TypeError: myFunc() отсутствует 2 обязательных позиционных аргумента: 'j' и 'i'
Я не понимаю, как это работает из других примеров, и я не знаю терминологию, используемую в документации.
Я только хочу разделить этот вложенный цикл на подпотоки, если кто-то предложит другой подход, я весь слушаю.
пс. Я пытался использовать numba, но он выдает ошибки при взаимодействии с некоторыми библиотеками Scipy.
Заранее спасибо за вашу помощь!