当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python dask.array.from_array用法及代码示例


用法:

dask.array.from_array(x, chunks='auto', name=None, lock=False, asarray=None, fancy=True, getitem=None, meta=None, inline_array=False)

从看起来像数组的东西创建 dask 数组。

输入必须有 .shape , .ndim , .dtype 并支持 numpy 样式的切片。

参数

xarray_like
chunks整数,元组

如何对数组进行分块。必须是以下形式之一:

  • 像 1000 这样的块大小。
  • 像 (1000, 1000) 这样的块状。
  • 沿所有维度的所有块的显式大小,例如 ((1000, 1000, 500), (400, 400))。
  • 以字节为单位的大小,例如“100 MiB”,它将选择统一的 block-like 形状
  • “auto” 的作用与上述类似,但使用配置值 array.chunk-size 作为块大小

-1 或 None 作为块大小表示相应维度的大小。

namestr 或 bool,可选

用于数组的键名。默认为 x 的哈希值。

如果 x 的相同值用于创建多个数组,则散列很有用,因为 Dask 可以识别它们是相同的并避免重复计算。但是,它也可能很慢,如果数组不连续,则将其复制以进行散列。如果数组使用跨步技巧(例如 numpy.broadcast_to()skimage.util.view_as_windows() )来获得比物理大小更大的逻辑大小,则此副本可能会导致内存使用过多。

如果不需要散列提供的去重,可以使用name=False生成随机名称而不是散列,这样可以避免上述陷阱。使用name=True 等效于默认值。

默认情况下,散列使用 python 的标准 sha1。这种行为可以通过安装 cityhash、xxhash 或 murmurhash 来改变。如果已安装,可以在标记化步骤中获得large-factor 加速。

注意

由于此name 用作任务图中的键,因此您应确保它唯一标识其中包含的数据。如果您想提供一个仍然唯一的说明性名称,请将说明性名称与 array_likedask.base.tokenize() 结合起来。有关更多信息,请参见任务图。

lockbool 或 Lock,可选

如果x 不支持并发读取,那么在这里提供一个锁,或者传入 True 让 dask.array 为你创建一个。

asarray布尔型,可选

如果为 True,则在块上调用 np.asarray 以将它们转换为 numpy 数组。如果为 False,则块通过不变。如果 None (默认),如果 __array_function__ 方法未定义,我们使用 True。

fancy布尔型,可选

如果 x 不支持花哨的索引(例如,使用列表或数组进行索引),则设置为 False。默认为真。

metaArray-like,可选

生成的 dask 数组的元数据。这是对输入数组进行切片后产生的数组。默认为输入数组。

inline_array布尔值,默认为 False

如何在任务图中包含数组。默认情况下(inline_array=False),数组本身包含在任务中,每个块通过其键引用该任务。

>>> x = h5py.File("data.h5")["/x"]  
>>> a = da.from_array(x, chunks=500)  
>>> dict(a.dask)  
{
   'array-original-<name>': <HDF5 dataset ...>,
   ('array-<name>', 0): (getitem, "array-original-<name>", ...),
   ('array-<name>', 1): (getitem, "array-original-<name>", ...)
}

使用 inline_array=True ,Dask 将直接将数组内联到任务图的值中。

>>> a = da.from_array(x, chunks=500, inline_array=True)  
>>> dict(a.dask)  
{
   ('array-<name>', 0): (getitem, <HDF5 dataset ...>, ...),
   ('array-<name>', 1): (getitem, <HDF5 dataset ...>, ...)
}

请注意,任务图中没有键,只有数组x。相反,它直接放在值中。

inline_array 的正确选择取决于几个因子,包括 x 的大小、创建它的成本、您使用的调度程序以及下游计算的模式。作为一种启发式方法,当数组 x 的序列化和反序列化成本较低(因为它多次包含在图表中)并且您遇到排序问题时,inline_array=True 可能是正确的选择(有关更多信息,请参阅排序)。

x 是 NumPy 数组时,这不起作用。

例子

>>> x = h5py.File('...')['/data/path']  
>>> a = da.from_array(x, chunks=(1000, 1000))

如果您的基础数据存储不支持并发读取,则包含 lock=True 关键字参数或 lock=mylock 如果您希望多个数组围绕同一个锁进行协调。

>>> a = da.from_array(x, chunks=(1000, 1000), lock=True)

如果您的基础数据存储具有 .chunks 属性(如 h5py 和 zarr 数据集所做的那样),那么如果您不提供块形状,则将使用该块形状的倍数。

>>> a = da.from_array(x, chunks='auto')  
>>> a = da.from_array(x, chunks='100 MiB')  
>>> a = da.from_array(x)

如果提供名称,请确保它是唯一的

>>> import dask.base
>>> token = dask.base.tokenize(x)  
>>> a = da.from_array('myarray-' + token)

NumPy ndarray 被即刻地切片,然后嵌入到图中。

>>> import dask.array
>>> a = dask.array.from_array(np.array([[1, 2], [3, 4]]), chunks=(1,1))
>>> a.dask[a.name, 0, 0][0]
array([1])

带有exactly-specified 的块,可以创建不同的大小。

>>> import numpy as np
>>> import dask.array as da
>>> x = np.random.random((100, 6))
>>> a = da.from_array(x, chunks=((67, 33), (6,)))

相关用法


注:本文由纯净天空筛选整理自dask.org大神的英文原创作品 dask.array.from_array。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。