當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。