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


Python dask.array.gufunc.apply_gufunc用法及代碼示例


用法:

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_sizesdict,可選,僅關鍵字

從維度名稱到輸出大小的可選映射。僅當新的核心維度(未在輸入上找到)出現在輸出上時使用。

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

**kwargsdict

額外的關鍵字參數傳遞給func

返回

單個 dask.array 數組或 dask.array 數組的元組

參考

1

https://docs.scipy.org/doc/numpy/reference/ufuncs.html

2

https://docs.scipy.org/doc/numpy/reference/c-api/generalized-ufuncs.html

例子

>>> 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)

相關用法


注:本文由純淨天空篩選整理自dask.org大神的英文原創作品 dask.array.gufunc.apply_gufunc。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。