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


Python dask.array.histogramdd用法及代碼示例

用法:

dask.array.histogramdd(sample, bins, range=None, normed=None, weights=None, density=None)

numpy.histogramdd() 的受阻變體。

僅允許沿第 0(行)軸(對應於樣本總數的軸)對輸入數據(sample)進行分塊。沿第 1 軸(列)軸分塊的數據與此函數不兼容。如果使用權重,它們必須沿第 0 軸分塊,與輸入樣本相同。

三維直方圖的示例設置,其中樣本形狀為 (8, 3) 且權重為形狀 (8,) ,樣本塊為 ((4, 4), (3,)) 且權重塊為 ((4, 4),) 結構表:

樣品 (8 x 3)

權重

chunk

row

x

y

z

row

w

0

0

5

6

6

0

0.5

1

8

9

2

1

0.8

2

3

3

1

2

0.3

3

2

5

6

3

0.7

1

4

3

1

1

4

0.3

5

3

2

9

5

1.3

6

8

1

5

6

0.8

7

3

5

3

7

0.7

如果樣本第 0 維和權重第 0(行)維的分塊不同,則會引發 ValueError。如果坐標分組((x,y,z)三重奏)由塊邊界分隔,則將引發ValueError。如果數據是這種形式,我們建議您重新分塊。

數據的塊屬性(和可選權重)用於檢查與阻塞算法的兼容性(如上所述);因此,您必須在來自 dask.dataframe 的集合上調用 to_dask_array ,即 dask.dataframe.Seriesdask.dataframe.DataFrame

該函數還兼容 x , yz 是具有相同分塊的單個 1D 數組。在這種情況下,數據應作為元組傳遞:histogramdd((x, y, z), ...)

參數

sampledask.array.Array (N, D) 或 dask.array.Array 的序列

要直方圖的多維數據。

注意當樣本是 dask Arrays 序列時對樣本的不尋常解釋:

  • 當一個 (N, D) dask Array 時,每一行都是樣本中的一個條目(在 D 維空間中的坐標)。
  • 當一個 dask Arrays 序列時,序列中的每個元素都是單個坐標值的數組。
bins說明 bin 邊、整數或整數序列的數組序列

bin 規範。

可能的分箱配置是:

  • 說明沿每個維度單調增加的 bin 邊的數組序列。
  • 單個 int 說明將在每個維度中使用的 bin 總數(這需要定義 range 參數)。
  • 說明要在每個維度中使用的 bin 總數的整數序列(這需要定義 range 參數)。

當 bin 由數組說明時,包括最右邊的邊。由數組說明的 bin 也允許不均勻的 bin 寬度。

range對序列,可選

長度為 D 的序列,如果在 bins 中未明確給出邊,則每個 (min, max) 元組給出要使用的外部 bin 邊。如果已定義,則此參數必須具有每個維度的條目。與 numpy.histogramdd() 不同,如果 bins 未定義 bin 邊,則需要此參數(此函數不會自動使用給定維度中值的最小值和最大值,因為輸入數據可能會延遲)。

normed布爾型,可選

行為相同的密度參數的別名。為避免與 histogram , density 的損壞參數混淆,應首選。

weightsdask.array.Array,可選

對輸入數據中的每個樣本進行加權的值數組。權重的塊必須與沿數據樣本的第 0(行)軸的塊相同。

density布爾型,可選

如果False(默認),返回的數組表示每個bin中的樣本數。如果 True ,則返回的數組表示每個 bin 的概率密度函數。

返回

dask.array.Array

直方圖的值。

列表(dask.array.Array)

表示沿每個維度的 bin 邊的數組序列。

例子

使用沿每個維度的不同 bin 邊計算 5 個塊中的直方圖:

>>> import dask.array as da
>>> x = da.random.uniform(0, 1, size=(1000, 3), chunks=(200, 3))
>>> edges = [
...     np.linspace(0, 1, 5), # 4 bins in 1st dim
...     np.linspace(0, 1, 6), # 5 in the 2nd
...     np.linspace(0, 1, 4), # 3 in the 3rd
... ]
>>> h, edges = da.histogramdd(x, bins=edges)
>>> result = h.compute()
>>> result.shape
(4, 5, 3)

按總數及其範圍定義箱,以及使用權重:

>>> bins = (4, 5, 3)
>>> ranges = ((0, 1),) * 3  # expands to ((0, 1), (0, 1), (0, 1))
>>> w = da.random.uniform(0, 1, size=(1000,), chunks=x.chunksize[0])
>>> h, edges = da.histogramdd(x, bins=bins, range=ranges, weights=w)
>>> np.isclose(h.sum().compute(), w.sum().compute())
True

使用一維數組序列作為輸入:

>>> x = da.array([2, 4, 2, 4, 2, 4])
>>> y = da.array([2, 2, 4, 4, 2, 4])
>>> z = da.array([4, 2, 4, 2, 4, 2])
>>> bins = ([0, 3, 6],) * 3
>>> h, edges = da.histogramdd((x, y, z), bins)
>>> h
dask.array<sum-aggregate, shape=(2, 2, 2), dtype=float64, chunksize=(2, 2, 2), chunktype=numpy.ndarray>
>>> edges[0]
dask.array<array, shape=(3,), dtype=int64, chunksize=(3,), chunktype=numpy.ndarray>
>>> h.compute()
array([[[0., 2.],
        [0., 1.]],

       [[1., 0.],
        [2., 0.]]])
>>> edges[0].compute()
array([0, 3, 6])
>>> edges[1].compute()
array([0, 3, 6])
>>> edges[2].compute()
array([0, 3, 6])

相關用法


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