将项目分配给Python dask数组对象 [英] Item assignment to Python dask array objects

查看:96
本文介绍了将项目分配给Python dask数组对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我创建了一个Python dask数组,并尝试按如下所示修改数组的一部分:

I've created a Python dask array and I'm trying to modify a slice of the array as follows:

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数组会引发异常:

Such an attempt to modify the dask array raises the exception:

TypeError: 'Array' object does not support item assignment

是否可以在不引发异常的情况下修改dask数组切片?

Is there a way to modify a dask array slice without raising an exception?

推荐答案

当前 dask.array 不支持项目分配或任何其他突变操作。

Currently dask.array does not support item assignment or any other mutation operation.

在上述情况下,我建议使用零连接

In the case above I recommend concatenating with zeros

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(条件,iftrue,iffalse)函数在解决经常需要突变的情况下也非常有用。

The da.where(condition, iftrue, iffalse) function can also be quite useful in working around cases where mutation is often desired.

这篇关于将项目分配给Python dask数组对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆