用法:
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 样式的切片。- x:array_like
- chunks:整数,元组
如何对数组进行分块。必须是以下形式之一:
- 像 1000 这样的块大小。
- 像 (1000, 1000) 这样的块状。
- 沿所有维度的所有块的显式大小,例如 ((1000, 1000, 500), (400, 400))。
- 以字节为单位的大小,例如“100 MiB”,它将选择统一的 block-like 形状
- “auto” 的作用与上述类似,但使用配置值
array.chunk-size
作为块大小
-1 或 None 作为块大小表示相应维度的大小。
- name:str 或 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_like
的dask.base.tokenize()
结合起来。有关更多信息,请参见任务图。- lock:bool 或 Lock,可选
如果
x
不支持并发读取,那么在这里提供一个锁,或者传入 True 让 dask.array 为你创建一个。- asarray:布尔型,可选
如果为 True,则在块上调用 np.asarray 以将它们转换为 numpy 数组。如果为 False,则块通过不变。如果 None (默认),如果
__array_function__
方法未定义,我们使用 True。- fancy:布尔型,可选
如果
x
不支持花哨的索引(例如,使用列表或数组进行索引),则设置为 False。默认为真。- meta:Array-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,)))
相关用法
- Python dask.array.from_delayed用法及代码示例
- Python dask.array.from_tiledb用法及代码示例
- Python dask.array.frompyfunc用法及代码示例
- Python dask.array.fromfunction用法及代码示例
- Python dask.array.frexp用法及代码示例
- Python dask.array.fft.ifftshift用法及代码示例
- Python dask.array.fft.fftshift用法及代码示例
- Python dask.array.floor_divide用法及代码示例
- Python dask.array.flipud用法及代码示例
- Python dask.array.fft.irfftn用法及代码示例
- Python dask.array.float_power用法及代码示例
- Python dask.array.fft.irfft用法及代码示例
- Python dask.array.fmax用法及代码示例
- Python dask.array.fft.fft2用法及代码示例
- Python dask.array.fft.rfftn用法及代码示例
- Python dask.array.fft.rfft2用法及代码示例
- Python dask.array.fft.hfft用法及代码示例
- Python dask.array.fft.ifft用法及代码示例
- Python dask.array.fabs用法及代码示例
- Python dask.array.fft.fft_wrap用法及代码示例
注:本文由纯净天空筛选整理自dask.org大神的英文原创作品 dask.array.from_array。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。