9

Python dask 配列を作成しました。配列のスライスを次のように変更しようとしています。

import numpy as np
import dask.array as da

x = np.random.random((20000, 100, 100)) # Create numpy array
dx = da.from_array(x, chunks=(x.shape[0], 10, 10)) # Create dask array from numpy array

dx[:50, :, :] = 0 # Modify a slice of the dask array

このように dask 配列を変更しようとすると、例外が発生します。

TypeError: 'Array' object does not support item assignment

例外を発生させずに dask 配列スライスを変更する方法はありますか?

4

1 に答える 1

6

現在、dask.arrayはアイテムの割り当てやその他のミューテーション操作をサポートしていません。

上記の場合、ゼロで連結することをお勧めします

In [1]: import dask.array as da

In [2]: dx = da.random.random((20000 - 50, 100, 100), chunks=(None, 10, 10))

In [3]: z = da.zeros((50, 100, 100), chunks=(50, 10, 10))

In [4]: dx2 = da.concatenate([z, dx], axis=0)

In [5]: dx2
Out[5]: dask.array<concate..., shape=(20000, 100, 100), dtype=float64, chunksize=(50, 10, 10)>

In [6]: (dx2 == 0)[0:100, 0, 0].compute()
Out[6]: 
array([ True,  True,  True,  True,  True,  True,  True,  True,  True,
        True,  True,  True,  True,  True,  True,  True,  True,  True,
        True,  True,  True,  True,  True,  True,  True,  True,  True,
        True,  True,  True,  True,  True,  True,  True,  True,  True,
        True,  True,  True,  True,  True,  True,  True,  True,  True,
        True,  True,  True,  True,  True, False, False, False, False,
       False, False, False, False, False, False, False, False, False,
       False, False, False, False, False, False, False, False, False,
       False, False, False, False, False, False, False, False, False,
       False, False, False, False, False, False, False, False, False,
       False, False, False, False, False, False, False, False, False, False], dtype=bool)

このda.where(condition, iftrue, iffalse)関数は、ミューテーションが頻繁に必要になる場合に対処する場合にも非常に役立ちます。

于 2016-03-21T23:01:21.217 に答える