Вот пример того, как вы можете использовать multiprocessing
для работы со строками массива 2d numpy и постоянного вектора.
В этом примере тот же вектор b
(эквивалентный ваш x
) создается точками с каждой строкой массива a
.
import numpy as np
from multiprocessing import Pool
def dot_product(row, vec):
return (row * vec).sum()
a = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
[10, 11, 12]])
b = np.array([10, 11, 12])
p = Pool(3) # max number of simultaneous processes
print(p.starmap(dot_product, ((row, b) for row in a)))
Обратите внимание, что вы можете передавать только выбираемые объекты в multiprocessing.Pool
. Хотя массивы numpy можно выбирать, а функция (например, dot_product
здесь) - методы экземпляра - нет. Таким образом, вы не можете использовать свою модель (LinearRegression()
) в качестве первого аргумента для Pool.map
(или Pool.starmap
). Вместо этого вам нужно будет создать экземпляр LinearRegression
отдельно внутри функции для каждого процесса.
Собрав все это вместе для вас (хотя, очевидно, у меня недостаточно информации для тестирования), вы получите что-то вроде этого :
def get_data_slope(row, x):
model = LinearRegression()
model.fit(x.reshape((-1, 1)), row, 1)
return model.coef_[0]
p = Pool(3)
data_slopes[:] = p.starmap(get_data_slope, ((row, x) for row in img1_data_r))