当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。