How to accelerate the application of the following for loop and function? How to accelerate the application of the following for loop and function? numpy numpy

How to accelerate the application of the following for loop and function?


list_list_int = [1,2,3,4,5,6]for j in chunks(2, list_list_int):  for i in j:    avg_, max_, last_ = foo(bar, i)


I don't have chunks installed, but from the docs I suspect it produces (for size 2 chunks, from:

alist = [[1,2],[3,4],[5,6],[7,8]]                                     j = [[1,2],[3,4]]j = [[5,6],[7,8]]   

which would produce an error:

In [116]: alist[j]                                                              TypeError: list indices must be integers or slices, not list

And if your foo can't work with the full list of lists, I don't see how it will work with that list split into chunks. Apparently it can only work with one sublist at a time.


If you are looking to perform parallel operations on a numpy array, then I would use Dask.

With just a few lines of code, your operation should be able to be easily ran on multiple processes and the highly developed Dask scheduler will balance the load for you. A huge benefit to Dask compared to other parallel libraries like joblib, is that it maintains the native numpy API.

import dask.array as da# Setting up a random array with dimensions 10K rows and 10 columns# This data is stored distributed across 10 chunks, and the columns are kept together (1_000, 10)x = da.random.random((10_000, 10), chunks=(1_000, 10))x = x.persist()  # Allow the entire array to persist in memory to speed up calculationdef foo(x):    return x / 10# Using the native numpy function, apply_along_axis, applying foo to each row in the matrix in parallelresult_foo = da.apply_along_axis(foo, 0, x)# View original contentsx[0:10].compute()# View sample of resultsresult_foo = result_foo.compute()result_foo[0:10]