Python(pyemd)

    科技2022-08-16  144

    用于Python的EMD

    PyEMD是Ofir Pele和Michael Werman实现的Python包装器,它允许与NumPy一起使用。

    Installation

    pip install -i https://pypi.doubanio.com/simple/ --trusted-host pypi.doubanio.com pyemd

    Usage

    >>> from pyemd import emd >>> import numpy as np >>> first_histogram = np.array([0.0, 1.0]) >>> second_histogram = np.array([5.0, 3.0]) >>> distance_matrix = np.array([[0.0, 0.5], ... [0.5, 0.0]]) >>> emd(first_histogram, second_histogram, distance_matrix) 3.5

    您还可以得到相关的最小成本流:

    >>> from pyemd import emd_samples >>> first_array = [1, 2, 3, 4] >>> second_array = [2, 3, 4, 5] >>> emd_samples(first_array, second_array, bins=2) 0.5

    emd()

    emd(first_histogram, second_histogram, distance_matrix, extra_mass_penalty=-1.0)

    参数:

    first_histogram (np.ndarray):一个np类型的一维数组。长度为N的浮点64。

    second_histogram (np.ndarray): np的一维数组。长度为N的浮点64。

    distance_matrix (np.ndarray): np的一个二维数组。float64,大小至少为N×N。通过给出直方图各箱子之间的两两距离,它定义了底层度量,或者地面距离。它必须代表一个度量;如果没有,就没有警告。

    关键字参数:

    extra_mass_penalty (float):对额外质量的惩罚。如果你想要得到的距离度量,它应该至少一半空间的直径(最大可能任意两点之间的距离)。如果想要部分匹配,可以将其设置为零(但不能保证结果距离是一个度量)。默认值为-1.0,表示使用距离矩阵中的最大值。

    返回(float)变量

    emd_with_flow()

    emd_with_flow(first_histogram, second_histogram, distance_matrix, extra_mass_penalty=-1.0)

    参数与emd()相同。

    返回: (tuple(float, list(list(float)))) EMD值和相关的最小成本流。

    emd_samples()

    emd_samples(first_array, second_array, extra_mass_penalty=-1.0, distance='euclidean', normalized=True, bins='auto', range=None)

    参数:

    first_array (Iterable):一个用于生成直方图的一维样本数组。 second_array (Iterable):一个用于生成直方图的一维样本数组。

    关键字参数:

    extra_mass_penalty (float):与emd()相同。 distance (string or function):在一维np.ndarray上实现一个度量的字符串或函数。默认欧式距离。目前仅限于“欧几里得”或你自己的函数,它必须采取一个1D数组和返回一个正方形的二维数组的两两距离。 normalized (boolean):如果为真(默认),则将直方图视为数据集的分数。如果为假,则将直方图视为计数。在后一种情况下EMD将数组长度差异很大。 bin (int或string):生成的直方图中包含的bin的数量。如果是字符串,则必须是np.histogram()所接受的bin选择算法之一。默认为“auto”,这将给出“sturges”和“fd”估计量的最大值。 range (tuple(int, int)):箱子的上下范围,传递给numpy.histogram()。默认值为first_array和second_array的并集范围。注意:如果给定范围不是默认范围的超集,则不会给出警告。Returns: (float)在first_array和second_array直方图之间的EMD值。

     

    限制和警告 emd()和emd_with_flow (): 假设distance_matrix表示一个度量;没有检查,以确保这是真的。请参阅pyemd/lib/emd_hat中的文档。查看更多信息。 直方图和距离矩阵必须是类型为np.float64的numpy数组。原来的c++模板函数可以接受任何数值c++类型,但是这个包装器只实例化带有double的模板(Cython转换np)。float64翻倍)。如果有需求,我可以添加对其他类型的支持。 emd_with_flow (): 流动矩阵不包含流入/流出额外质量仓的流动。 emd_samples (): 使用默认的bin ='auto'会导致额外调用np.histogram()来确定bin长度,因为NumPy bin选择器不会在公共API中公开。为了提高性能,您可能需要自己设置箱子。

    Processed: 0.009, SQL: 10