Python中的模式匹配

Python中的模式匹配,python,list,machine-learning,pattern-matching,Python,List,Machine Learning,Pattern Matching,这个问题可能更接近于图像处理中的模式匹配 是否有任何方法可以获得应用于不同列表的成本函数值,该值将返回列表间的接近度?比如说, a = [4, 7, 9] b = [5, 8, 10] c = [2, 3] 现在,的成本函数值可能是2元组,(a,b)应该大于(a,c)和(b,c)。这可能是一个巨大的计算任务,因为可能会有更多的列表,所有的排列都会增加问题的复杂性。因此,只有2元组集也可以工作 编辑: 列表名称指示操作的类型,其中的元素是相应操作发生的时间。我想做的是找出一组具有相似发生模式的动

这个问题可能更接近于图像处理中的模式匹配

是否有任何方法可以获得应用于不同列表的成本函数值,该值将返回列表间的接近度?比如说,

a = [4, 7, 9]
b = [5, 8, 10]
c = [2, 3]
现在,的成本函数值可能是2元组,(a,b)应该大于(a,c)和(b,c)。这可能是一个巨大的计算任务,因为可能会有更多的列表,所有的排列都会增加问题的复杂性。因此,只有2元组集也可以工作

编辑: 列表名称指示操作的类型,其中的元素是相应操作发生的时间。我想做的是找出一组具有相似发生模式的动作。因为两个动作不能同时发生,所以它是列表内和列表间距离的组合


提前谢谢

要比较两个字符串或列表,可以使用(Python实现从):

在您的列表中使用:

>>> a = [4, 7, 9]
>>> b = [5, 8, 10]
>>> c = [2, 3]
>>> levenshtein(a,b)
3
>>> levenshtein(b,c)
3
>>> levenshtein(a,c)
3
编辑:通过在注释中添加解释,您可以使用
set
s而不是列表。由于集合的每个元素都是唯一的,因此再次添加现有元素是不可操作的。您可以使用集合的
isdisjoint
方法检查两个集合是否包含相同的元素,或者使用
交集
方法查看它们有哪些共同元素:

In [1]: a = {1,3,5}

In [2]: a.add(3)

In [3]: a
Out[3]: set([1, 3, 5])

In [4]: a.add(4)

In [5]: a
Out[5]: set([1, 3, 4, 5])

In [6]: b = {2,3,7}
In [7]: a.isdisjoint(b)
Out[7]: False

In [8]: a.intersection(b)
Out[8]: set([3])

注意:这种创建集合的语法至少需要Python 2.7。

您提出了一个非常困难的问题。在不允许改变尺寸的情况下,您可以使用多个距离度量(,等,请查看另一节了解更多信息)。您需要的一个取决于您认为这些列表所代表的事物的接近程度的良好度量


如果不知道你想用这些列表做什么,没有人能定义一个好的答案是什么,更不用说如何有效地计算了。

根据你对Michael的澄清给出的答案,你可能应该查找“动态时间扭曲”


我还没用过,但它的广告说它提供了DTW。(可能是用来敲开螺母的锤子;取决于您的使用情况。)

谢谢罗兰!虽然代码可能没有直接的用处,但是非常感谢你给我介绍了Levenshtein距离的概念。Michael,我理解你的意思。基本上,列表指示动作的类型,其中的元素是相应动作发生的时间。我想做的是找出一组具有相似发生模式的动作。但不能同时发生两个操作,因此这是列表内和列表间距离的组合。@RLOA:您真的应该将此注释编辑到您的问题中。完成。希望不要混淆。那么2,4,8和3,5,9会相似吗?如果是这样,它到12、14、18、26和12、14、18、19的距离是多少?您是否可以对数据进行一些转换以使其更易于处理?不管怎样,我觉得没有一个标准的解决方案你只是没听说过,所以你只能靠自己,除非你能找到一种方法把它转化成一个更常见的问题。但话说回来,这可能是我从未听说过的常见任务:)谢谢你的回复和链接到mlpy,丹!事实上,“扭曲”不应该应用于我的情况。时间距离也用于匹配模式。我也在寻找mlpy的其他机会。
In [1]: a = {1,3,5}

In [2]: a.add(3)

In [3]: a
Out[3]: set([1, 3, 5])

In [4]: a.add(4)

In [5]: a
Out[5]: set([1, 3, 4, 5])

In [6]: b = {2,3,7}
In [7]: a.isdisjoint(b)
Out[7]: False

In [8]: a.intersection(b)
Out[8]: set([3])