有没有一种有效的方法来更新/替换python中dask数组的特定值?

问题描述 投票:0回答:1

所以我有一个 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,但它给了我很多错误......

python numpy performance parallel-processing dask
1个回答
0
投票

同时替换多个值的速度要快几个数量级。

我无法重新创建您的解决方案进行比较。

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))

image showing line profiling, showing that replacing multiple lines is much faster

© www.soinside.com 2019 - 2024. All rights reserved.