Python C语言中的动态时间扭曲

Python C语言中的动态时间扭曲,python,c,dtw,Python,C,Dtw,因此,我可以找到很多关于DTW for python的指南,它们都可以正常工作。但是我需要将代码translate转换成C,但是我已经写了一年多的C代码了 在C代码中,我有两个数组 static int-codeLock[6][2]={ {1, 0}, {2, 671}, {3, 1400}, {4, 2000}, {5, 2800}, };; 静态整数代码[6][2]={ {1, 0}, {2, 600}, {3, 1360}, {4, 1990}, {5, 2800}, };; 我将使用D

因此,我可以找到很多关于DTW for python的指南,它们都可以正常工作。但是我需要将代码translate转换成C,但是我已经写了一年多的C代码了

在C代码中,我有两个数组

static int-codeLock[6][2]={
{1, 0},
{2, 671},
{3, 1400},
{4, 2000},
{5, 2800},
};;
静态整数代码[6][2]={
{1, 0},
{2, 600},
{3, 1360},
{4, 1990},
{5, 2800},
};;
我将使用DTW来比较数组的右侧
codeLock(n)(1)/code(m)(1)
,所以不应该看1..5

但是是的

在python中,我有两个函数,一个用于
euclidean distance
,即:

def compute_euclidean_distance_matrix(x,y)->np.array:
计算距离矩阵
该方法计算两个序列之间的成对欧氏距离。
序列可以有不同的长度。
"""
距离=np.零((len(y),len(x)))
对于范围内的i(len(y)):
对于范围内的j(len(x)):
距离[i,j]=(x[j]-y[i])**2
返回区
另一个用于累计成本:

def compute\u累计成本\u矩阵(x,y)->np.array:
“”“使用欧几里德距离计算扭曲路径的累积成本矩阵
"""
距离=计算欧几里德距离矩阵(x,y)
#初始化
成本=np.零((len(y),len(x)))
成本[0,0]=距离[0,0]
对于范围(1,len(y))中的i:
成本[i,0]=距离[i,0]+成本[i-1,0]
对于范围(1,len(x))内的j:
成本[0,j]=距离[0,j]+成本[0,j-1]
#累计翘曲路径成本
对于范围(1,len(y))中的i:
对于范围(1,len(x))内的j:
成本[i,j]=min(
成本[i-1,j],#插入
成本[i,j-1],#删除
成本[i-1,j-1]#匹配
)+距离[i,j]
退货成本
这段代码来自我为理解DTW的工作原理而遵循的指南,但它是用python编写的,我需要用C编写

这可以很容易地在python中进行测试,如下所示:

x=[067140020002800]
y=[060013601990,2800]
计算欧几里得=计算欧几里得距离矩阵(x,y)
计算累计=计算累计成本矩阵(x,y)
打印(“\n计算机\u欧几里德距离\u矩阵”)
打印(计算欧几里得)
打印(“\n计算\累计\成本\矩阵”)
打印(累计计算)
打印(“\nflipud”)
打印(np.flipud(计算累积))
这是我的输出

我还研究了
fastdtw
,然后我的测试是这样的

x=[067140020002800]
y=[060013601990,2800]
dtw_距离,扭曲路径=快速dtw(x,y,距离=欧几里德)
打印(“\ndtw\u距离”)
打印(dtw_距离)
这是我的输出


你们中有谁知道在哪里可能有一个GitHub/指南来指导如何在C中完成所有这些工作吗?因为那对我有很大帮助。如果您愿意帮助我翻译这段代码,我当然会非常感激。

动态时间扭曲的C实现正在进行中


您始终可以使用Cython将python翻译为C,但是生成的代码有时不起作用,完全重写更好

您是否知道在哪里可能有一个GitHub/指南,介绍如何在C中执行所有这些操作-要在C中执行这些操作,您需要了解C。尽管这看起来不是一件非常复杂的事情,所以不需要专家级别。这是我使用的指南-->@EugeneSh的链接。我的问题是,我找不到一个可用的,我只是不想你们中的一些人花很多时间翻译这个,如果有一个我不知道的GitHub,我的一个朋友发现了一个链接,我可以从中获得一些灵感: