我有以下for循环:
for j in range(len(list_list_int)):
arr_1_, arr_2_, arr_3_ = foo(bar, list_of_ints[j])
arr_1[j,:] = arr_1_.data.numpy()
arr_2[j,:] = arr_2_.data.numpy()
arr_3[j,:] = arr_3_.data.numpy()
我想对多处理应用foo
,主要是因为这需要花费大量时间才能完成。我尝试使用funcy's块方法批量进行此操作:
for j in chunks(1000, list_list_int):
arr_1_, arr_2_, arr_3_ = foo(bar, list_of_ints[j])
arr_1[j,:] = arr_1_.data.numpy()
arr_2[j,:] = arr_2_.data.numpy()
arr_3[j,:] = arr_3_.data.numpy()
但是,我得到list object cannot be interpreted as an integer
。通过多处理应用foo的正确方法是什么?
答案 0 :(得分:5)
series: [{
name: 'Speed',
dial: {
backgroundColor:'#D9972E',
radius: '100%',
baseWidth: 5,
baseLength: '5%',
baseWidth: 10,
rearLength: '0%',
},
data: [80],
tooltip: {
valueSuffix: ' km/h'
}
}]
答案 1 :(得分:2)
我没有安装chunks
,但是我怀疑它会从文档中生成(对于2块大小的文件,来自:
alist = [[1,2],[3,4],[5,6],[7,8]]
j = [[1,2],[3,4]]
j = [[5,6],[7,8]]
会产生错误:
In [116]: alist[j]
TypeError: list indices must be integers or slices, not list
如果您的foo
无法使用完整的列表列表,则看不到将其拆分成大块的列表将如何工作。显然,一次只能使用一个子列表。
答案 2 :(得分:2)
如果您希望对numpy数组执行并行操作,那么我将使用Dask。
仅需几行代码,您的操作应该可以轻松地在多个进程上运行,并且高度发达的Dask调度程序将为您平衡负载。与其他并行库(如joblib)相比,Dask的一个巨大好处是它可以维护本机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 calculation
def foo(x):
return x / 10
# Using the native numpy function, apply_along_axis, applying foo to each row in the matrix in parallel
result_foo = da.apply_along_axis(foo, 0, x)
# View original contents
x[0:10].compute()
# View sample of results
result_foo = result_foo.compute()
result_foo[0:10]