用法:
dask.array.register_chunk_type(type)將給定類型注冊為有效的塊和向下轉換的數組類型
- type:類型
要注冊為類型的 Duck 數組類型 Dask 可以安全地包裝為一個塊,並且 Dask 在算術運算和 NumPy 函數/ufunc 中不會推遲到該塊。
參數:
注意:
dask.array.Array可以在其塊中包含任何足夠的 “NumPy-like” 數組。這些也稱為“duck arrays”,因為它們匹配 NumPy 數組 API 中最重要的部分,因此在依賴鴨子類型時表現相同。但是,為了使多個鴨子數組類型正確地互操作,它們需要根據明確定義的類型轉換層次結構 (see NEP 13) 在算術運算和 NumPy 函數/ufunc 中正確地相互延遲。為了維護這種層次結構,Dask 遵循除了其內部注冊表中的所有其他鴨數組類型。默認情況下,此注冊表包含
numpy.ndarraynumpy.ma.MaskedArraycupy.ndarraysparse.SparseArrayscipy.sparse.spmatrix
此函數用於將任何其他類型附加到此注冊表。如果一個類型不在此注冊表中,但仍是向下轉換類型(它在類型轉換層次結構中位於
dask.array.Array之下),則由於所有操作數類型都返回NotImplemented,將引發TypeError。例子:
使用模擬
FlaggedArray類作為 Dask 未知的示例塊類型,具有最小的鴨數組 API:>>> import numpy.lib.mixins >>> class FlaggedArray(numpy.lib.mixins.NDArrayOperatorsMixin): ... def __init__(self, a, flag=False): ... self.a = a ... self.flag = flag ... def __repr__(self): ... return f"Flag: {self.flag}, Array: " + repr(self.a) ... def __array__(self): ... return np.asarray(self.a) ... def __array_ufunc__(self, ufunc, method, *inputs, **kwargs): ... if method == '__call__': ... downcast_inputs = [] ... flag = False ... for input in inputs: ... if isinstance(input, self.__class__): ... flag = flag or input.flag ... downcast_inputs.append(input.a) ... elif isinstance(input, np.ndarray): ... downcast_inputs.append(input) ... else: ... return NotImplemented ... return self.__class__(ufunc(*downcast_inputs, **kwargs), flag) ... else: ... return NotImplemented ... @property ... def shape(self): ... return self.a.shape ... @property ... def ndim(self): ... return self.a.ndim ... @property ... def dtype(self): ... return self.a.dtype ... def __getitem__(self, key): ... return type(self)(self.a[key], self.flag) ... def __setitem__(self, key, value): ... self.a[key] = value在注冊
FlaggedArray之前,兩種類型都將嘗試推遲到另一種:>>> import dask.array as da >>> da.ones(5) - FlaggedArray(np.ones(5), True) Traceback (most recent call last): ... TypeError: operand type(s) all returned NotImplemented ...但是,一旦注冊,Dask 將能夠使用這種新類型處理操作:
>>> da.register_chunk_type(FlaggedArray) >>> x = da.ones(5) - FlaggedArray(np.ones(5), True) >>> x dask.array<sub, shape=(5,), dtype=float64, chunksize=(5,), chunktype=dask.FlaggedArray> >>> x.compute() Flag: True, Array: array([0., 0., 0., 0., 0.])
相關用法
- Python dask.array.rechunk用法及代碼示例
- Python dask.array.remainder用法及代碼示例
- Python dask.array.repeat用法及代碼示例
- Python dask.array.real用法及代碼示例
- Python dask.array.result_type用法及代碼示例
- Python dask.array.reciprocal用法及代碼示例
- Python dask.array.random.weibull用法及代碼示例
- Python dask.array.random.geometric用法及代碼示例
- Python dask.array.rint用法及代碼示例
- Python dask.array.random.standard_cauchy用法及代碼示例
- Python dask.array.random.gumbel用法及代碼示例
- Python dask.array.random.standard_t用法及代碼示例
- Python dask.array.random.logistic用法及代碼示例
- Python dask.array.random.noncentral_chisquare用法及代碼示例
- Python dask.array.random.poisson用法及代碼示例
- Python dask.array.random.random_sample用法及代碼示例
- Python dask.array.random.gamma用法及代碼示例
- Python dask.array.rot90用法及代碼示例
- Python dask.array.random.normal用法及代碼示例
- Python dask.array.random.logseries用法及代碼示例
注:本文由純淨天空篩選整理自dask.org大神的英文原創作品 dask.array.register_chunk_type。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。
