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