所以我有一个 dask 整数数组(1 x 8192),我想找到一种有效的方法来替换特定值。
这是我当前使用的代码,速度非常慢,因为 dask 是不可变的,所以为了替换特定值,它被计算到 numpy 中,该值被替换,然后转换回 dask。这是我正在使用的代码:
self.M[bucket] = (self.M[bucket] & ~mask) | new_val.
self.M是我使用的dask数组,长度为8192,bucket是索引,是整数,mask和new_val也是整数。 我在 chatgpt 的帮助下使用了 da.map_blocks,但它给了我很多错误......
同时替换多个值的速度要快几个数量级。
我无法重新创建您的解决方案进行比较。
def replace_value(dask_array, index, value):
dask_array[index] = value
return dask_array
def multi_replace_value(dask_array, indices, values):
dask_array[indices] = values
return dask_array
an_array = da.random.random((8000, 1), chunks=(100, 100))
an_array2 = an_array.copy()
for idx, value in enumerate(np.arange(100)):
replace_value(an_array, idx, value)
multi_replace_value(an_array2, np.arange(100), np.arange(100).reshape(-1, 1))