Использовать массив numpy в общей памяти для многопроцессорной обработки

Я хотел бы использовать массив numpy в общей памяти для использования с модулем многопроцессорности. Сложность заключается в использовании его как массива numpy, а не только как массива ctypes.

from multiprocessing import Process, Array
import scipy

def f(a):
    a[0] = -a[0]

if __name__ == '__main__':
    # Create the array
    N = int(10)
    unshared_arr = scipy.rand(N)
    arr = Array('d', unshared_arr)
    print "Originally, the first two elements of arr = %s"%(arr[:2])

    # Create, start, and finish the child processes
    p = Process(target=f, args=(arr,))
    p.start()
    p.join()

    # Printing out the changed values
    print "Now, the first two elements of arr = %s"%arr[:2]

Результатом будет такой вывод:

Originally, the first two elements of arr = [0.3518653236697369, 0.517794725524976]
Now, the first two elements of arr = [-0.3518653236697369, 0.517794725524976]

Доступ к массиву можно получить с помощью ctypes, например arr [i] имеет смысл. Однако это не массив numpy, и я не могу выполнять такие операции, как -1 * arr или arr.sum () . Я полагаю, что решением было бы преобразовать массив ctypes в массив numpy. Однако (помимо того, что я не могу выполнить эту работу), я не верю, что ею больше будут делиться.

Кажется, существует стандартное решение общей проблемы.

94
задан Praveen 11 January 2018 в 07:34
поделиться