Python(pyemd)

用于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中公开。为了提高性能,您可能需要自己设置箱子。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值