для l oop с использованием параллельных вычислений - PullRequest
0 голосов
/ 14 января 2020
    sens = 0.7
    [num_y, num_x] = np.where((p < c*sens) | (p > c*sens))
    #[num_y, num_x] = np.where((corrected_w < c*0.97) | (corrected_w > c*1.03))

    ar = np.zeros((3,3))
    ar2 = np.zeros((3,3))
    for n in range(num_y.shape[0]):
        for j in range(-1,2):
            for k in range(-1,2):
                if num_y[n]+j == -1 or num_x[n]+k == -1 or num_y[n]+j == 576 or num_x[n]+k == 576:
                    ar[j+1][k+1] = 0
                    ar2[j+1][k+1] = 0
                else:
                    ar[j+1][k+1] = corrected_w[num_y[n]+j][num_x[n]+k]
                    ar2[j+1][k+1] = corrected_org_I[num_y[n]+j][num_x[n]+k]
        ar[1][1] = 0
        ar2[1][1] = 0
        corrected_w[num_y[n]][num_x[n]] = np.sum(ar)/np.count_nonzero(ar)
        corrected_org_I[num_y[n]][num_x[n]] = np.sum(ar2)/np.count_nonzero(ar2)

Я хочу вычислить for n in range(num_y.shape[0]):, используя параллель.

Поскольку n - это почти 100000 шагов, поэтому скорость выполнения очень низкая.

Пожалуйста, помогите мне.

1 Ответ

0 голосов
/ 14 января 2020

Я не уверен, что вы подразумеваете под "использованием параллели". Но чтобы ускорить выполнение, вы можете использовать мульти-обработку. Количество процессов и их производительность зависит от предоставленного ресурса. Предположим, вы можете позволить 4 процессам работать параллельно.

from multiprocessing.pool import ThreadPool
pool = ThreadPool(processes=4)
for n in range(num_y.shape[0]):
    pool.apply_async(\\call you function to do the operations.\\)

Вы также можете реализовать код для ожидания завершения процесса до его выхода.

Вы можете обратиться к https://docs.python.org/2/library/multiprocessing.html для подробного использования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...