用法:
dask.array.gufunc.apply_gufunc(func, signature, *args, axes=None, axis=None, keepdims=False, output_dtypes=None, output_sizes=None, vectorize=None, allow_rechunk=False, meta=None, **kwargs)
將通用的 ufunc 或類似的 python 函數應用於數組。
signature
確定函數是消耗還是產生核心維度。給定輸入數組 (*args
) 中的剩餘維度被視為循環維度,並且需要自然地相互廣播。換句話說,此函數類似於
np.vectorize
,但用於 dask 數組塊。如果函數本身也應矢量化,請使用vectorize=True
為方便起見。- func:可調用的
在返回數組或數組元組的輸入數組 (
*args
) 上調用類似func(*args, **kwargs)
的函數。如果提供了多個尺寸不匹配的參數,則此函數應以 NumPy 通用函數 [1] 的樣式在位置參數的軸上進行矢量化(廣播)(如果不是這種情況,請設置vectorize=True
) .如果此函數返回多個輸出,則還必須設置output_core_dims
。- signature: string:
指定
func
消耗和生成的核心維度。根據numpy.gufunc簽名規範[2]- *args:數字
可調用函數的輸入數組或標量。
- axes: List of tuples, optional, keyword only:
具有廣義 ufunc 應操作的軸索引的元組列表。例如,對於適合矩陣乘法的
"(i,j),(j,k)->(i,k)"
的簽名,基本元素是二維矩陣,這些元素被存儲在每個參數的最後兩個軸中。相應的軸關鍵字將是[(-2, -1), (-2, -1), (-2, -1)]
。為簡單起見,對於對一維數組(向量)進行操作的廣義 ufunc,接受單個整數而不是 single-element 元組,對於所有輸出都是標量的廣義 ufunc,可以省略輸出元組。- axis: int, optional, keyword only:
通用 ufunc 應在其上運行的單個軸。對於在單個共享核心維度上運行的 ufunc,這是一個 short-cut,相當於為每個 single-core-dimension 參數傳入帶有 (axis,) 條目的軸,對於所有其他參數傳入
()
。例如,對於簽名"(i),(i)->()"
,它相當於傳入axes=[(axis,), (axis,), ()]
。- keepdims: bool, optional, keyword only:
如果將其設置為 True,則減少的軸將作為尺寸為 1 的維度留在結果中,以便結果將針對輸入正確廣播。此選項隻能用於通用 ufunc,這些 ufunc 對所有具有相同數量的核心維度的輸入和沒有核心維度的輸出進行操作,即具有像
"(i),(i)->()"
或"(m,m)->()"
這樣的簽名。如果使用,可以使用軸和軸來控製輸出中尺寸的位置。- output_dtypes:可選,dtype 或 dtype 列表,僅關鍵字
有效的 numpy dtype 規範或其列表。如果未給出,則執行帶有少量數據的
func
調用,以嘗試自動確定輸出數據類型。- output_sizes:dict,可選,僅關鍵字
從維度名稱到輸出大小的可選映射。僅當新的核心維度(未在輸入上找到)出現在輸出上時使用。
- vectorize: bool, keyword only:
如果設置為
True
,則為方便起見,將np.vectorize
應用於func
。默認為False
。- allow_rechunk: Optional, bool, keyword only:
允許重新分塊,否則塊大小需要匹配並且核心尺寸僅包含一個塊。警告:啟用此函數會顯著增加內存使用量。默認為
False
。- meta: Optional, tuple, keyword only:
說明 gufunc 輸出的形狀和 dtype 的空 ndarray 元組。默認為
None
。- **kwargs:dict
額外的關鍵字參數傳遞給
func
- 單個 dask.array 數組或 dask.array 數組的元組
參數:
返回:
參考:
例子:
>>> import dask.array as da >>> import numpy as np >>> def stats(x): ... return np.mean(x, axis=-1), np.std(x, axis=-1) >>> a = da.random.normal(size=(10,20,30), chunks=(5, 10, 30)) >>> mean, std = da.apply_gufunc(stats, "(i)->(),()", a) >>> mean.compute().shape (10, 20)
>>> def outer_product(x, y): ... return np.einsum("i,j->ij", x, y) >>> a = da.random.normal(size=( 20,30), chunks=(10, 30)) >>> b = da.random.normal(size=(10, 1,40), chunks=(5, 1, 40)) >>> c = da.apply_gufunc(outer_product, "(i),(j)->(i,j)", a, b, vectorize=True) >>> c.compute().shape (10, 20, 30, 40)
相關用法
- Python dask.array.gufunc.as_gufunc用法及代碼示例
- Python dask.array.gufunc.gufunc用法及代碼示例
- Python dask.array.gradient用法及代碼示例
- Python dask.array.greater_equal用法及代碼示例
- Python dask.array.greater用法及代碼示例
- Python dask.array.stats.ttest_ind用法及代碼示例
- Python dask.array.ma.masked_values用法及代碼示例
- Python dask.array.divmod用法及代碼示例
- Python dask.array.negative用法及代碼示例
- Python dask.array.overlap.map_overlap用法及代碼示例
- Python dask.array.stats.ttest_rel用法及代碼示例
- Python dask.array.ma.average用法及代碼示例
- Python dask.array.vstack用法及代碼示例
- Python dask.array.isneginf用法及代碼示例
- Python dask.array.ma.masked_array用法及代碼示例
- Python dask.array.matmul用法及代碼示例
- Python dask.array.random.weibull用法及代碼示例
- Python dask.array.Array.compute_chunk_sizes用法及代碼示例
- Python dask.array.random.geometric用法及代碼示例
- Python dask.array.around用法及代碼示例
注:本文由純淨天空篩選整理自dask.org大神的英文原創作品 dask.array.gufunc.apply_gufunc。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。