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


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


用法:

dask.array.gufunc.as_gufunc(signature=None, **kwargs)

dask.array.gufunc 的裝飾器。

參數

signature String

指定 func 消耗和生成的核心維度。根據numpy.gufunc簽名規範[2]

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

返回

pyfunc 的裝飾器本身返回一個 gufunc

參考

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
>>> a = da.random.normal(size=(10,20,30), chunks=(5, 10, 30))
>>> @da.as_gufunc("(i)->(),()", output_dtypes=(float, float))
... def stats(x):
...     return np.mean(x, axis=-1), np.std(x, axis=-1)
>>> mean, std = stats(a)
>>> mean.compute().shape
(10, 20)
>>> a = da.random.normal(size=(   20,30), chunks=(10, 30))
>>> b = da.random.normal(size=(10, 1,40), chunks=(5, 1, 40))
>>> @da.as_gufunc("(i),(j)->(i,j)", output_dtypes=float, vectorize=True)
... def outer_product(x, y):
...     return np.einsum("i,j->ij", x, y)
>>> c = outer_product(a, b)
>>> c.compute().shape
(10, 20, 30, 40)

相關用法


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