日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > 循环神经网络 >内容正文

循环神经网络

matlab如何看算法时间,【Matlab实现】动态时间规划调整算法(DTW算法)——计算两个序...

發布時間:2023/12/9 循环神经网络 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 matlab如何看算法时间,【Matlab实现】动态时间规划调整算法(DTW算法)——计算两个序... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

【Matlab實現】動態時間規劃調整算法(DTW算法)——計算兩個序

【Matlab實現】動態時間規劃調整算法(DTW算法)——計算兩個序列之間的相似度

【Matlab實現】動態時間規劃調整算法(DTW算法)——計算兩個序列之間的相似度

概述

算法原理與步驟

算法的實現

概述

DTW (Dynamic time warping)算法是可以度量兩個獨立時間序列的相似度的一種方法。曾被廣泛應用在單詞音頻的匹配上。該方法主要用來解決在兩段序列的時長不同的情況下,進行相似度的判斷。

上圖中,左側時長相等,可以逐一進行歐式距離的計算,右側則是時長不等,經過DTW之后得到的結果,可以看出來兩個序列并不是一一對應的。

再比如上面左圖,要得到藍色序列與紅色序列的相似度,因為可以看出來兩個序列有經過平移的跡象,直接用一一匹配的方法顯然是不合理的。要得到左圖的對應效果,就需要用DTW方法。

算法原理與步驟

① 計算兩個特征點之間的歐氏距離。構成一個 n*m 矩陣,距離矩陣。

②計算累計距離 得到DP矩陣。

計算后的的值,放到DP矩陣中,為了更加直觀的理解,把這兩個序列繪圖如下:

其實在計算過程中,計算的順序其實是有方向的。網上有很多的博客說的也非常清楚,博主在這里不再贅述。為了更好的理解計算過程,列舉一個非常非常非常非常簡單的例子來幫助理解,如下圖: A B為帶有兩個特征值的序列,右邊是其對應的DP矩陣的求解步驟。

③ 當計算完整個DP矩陣 后,右上角的值(不一定是右上角,就是最終的得到的那個矩陣角上的值)即為兩個序列的累計距離。

④從右上角往左下角回溯,找到累計距離最短的路徑,根據路徑可以得到各個點之間的對應關系。

算法的實現

博主是利用matlab實現的這個算法,只是因為利用matlab可以很方便的查看矩陣和畫圖,檢查算法的正確性,但是沒有調用matlab中成形的函數,所以利用這個思路,用C/C++也是可以實現的,便于移植。

首先要寫好兩個函數。

一個是Get Min();用來得到三個值中的最小值,在計算 DP矩陣 時用得到。

function min = GetMin(a,b,c)

if(a <= b && a <= c)

min = a;

elseif(b <= a && b <= c)

min = b;

elseif(c <= b && c <= a)

min = c;

end

end

另一個是GetMinIndex();這是用來在得到 DTW 結果之后,方便顯示特征點匹配的結果,返回兩個序列對應特征點的索引。

function [index_i,index_j] = GetMinIndex(a,b,c,i,j)

%a 是相鄰左上角,b 是相鄰正上方,c說相鄰正左方

%i 是當前的x坐標 j 是當前 y坐標

if(a <= b && a <= c)

index_i = i-1;

index_j = j-1;

elseif(b <= a && b <= c)

index_i = i-1;

index_j = j;

elseif(c <= b && c <= a)

index_i = i;

index_j = j-1;

end

end

接下來就是主函數了

%生成兩個有明顯平移性質的時間序列

x = zeros(1,50);

for i = 1:50

x(i) = sin(i*2*pi/50)+2;

end

y = zeros(1,50);

for i = 1:50

y(i) = sin(i*2*pi/50 + pi/6)+2;

end

x_len = length(x);

y_len = length(y);

plot(1:x_len,x);hold on

plot(1:y_len,y);hold on

%計算兩序列每個特征點的距離矩陣

distance = zeros(x_len,y_len);

for i = 1:x_len

for j=1:y_len

distance(i,j) = (x(i)-y(j)).^2;

end

end

%計算兩個序列

DP = zeros(x_len,y_len);

DP(1,1) = distance(1,1);

for i=2:x_len

DP(i,1) = distance(i,1)+DP(i-1,1);

end

for j=2:y_len

DP(1,j) = distance(1,j)+DP(1,j-1);

end

for i=2:x_len

for j=2:y_len

DP(i,j) = distance(i,j) + GetMin(DP(i-1,j),DP(i,j-1),DP(i-1,j-1));

end

end

%回溯,找到各個特征點之間的匹配關系

i = x_len;

j = y_len;

while(~((i == 1)&&(j==1)))

plot([i,j],[x(i),y(j)],'b');hold on %畫出匹配之后的特征點之間的匹配關系

if(i==1)

index_i = 1

index_j = j-1

elseif(j==1)

index_i = i-1

index_j = 1

else

[index_i,index_j] = GetMinIndex(DP(i-1,j-1),DP(i-1,j),DP(i,j-1),i,j)

end

i = index_i;

j = index_j;

end

最終效果如下圖,可以看出來是考慮了平移之后的匹配。

【Matlab實現】動態時間規劃調整算法(DTW算法)——計算兩個序相關教程

數據庫實現-索引文件(Index File)BPTree 版本

數據庫實現-索引文件(Index File)BPTree 版本 Project 1 - Index file 這個項目呢,是嘗試復刻一下數據庫中的索引系統,只實現了內存版本的BPTree,索引文件并未建立成功(本博客持續更新ing) 文章目錄 Project 1 - Index file 1.Abstract 2.Tasks Require

Cube實現天空盒子,看了你自己也能做

Cube實現天空盒子,看了你自己也能做 大家可能都了解了引擎自帶的天空盒子,菜鳥也用過,感覺很棒。但是菜鳥在使用的過程中感覺天空盒子太大了,而場景比較小,所以想縮放一下天空盒子,奈何沒找見,所以私下自己使用Cube實現了一下,分享給大家 1.坐標空間

02-鏈表

02-鏈表 鏈表 1.定義 鏈表是一種線性的動態數據結構,與動態數組,棧,隊列的“動態”不同(這三種數據結構的底層都是靜態數組,依托resize解決容量問題),鏈表是真正意義上的動態數據結構 鏈表與數組相比,失去了隨機訪問的能力,但卻擁有動態的優點(不需

涉及簡歷

涉及簡歷 反射 反射概念:反射就是動態調用一個類/一個對象的成員變量/屬性、方法、構造器的功能 定義測試的User:看到原類的構造器、成員屬性、方法,想著怎么使用反射生成 package reflect;public class User { private int id=1; private String name=張三

ATM機項目實現:實現登錄,注冊操作(登錄后可以存款,取款,查

ATM機項目實現:實現登錄,注冊操作(登錄后可以存款,取款,查詢余額,轉賬) 提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 文章目錄 前言 一、分析需求 二、建立TestDemo.java 三、建立ATM.java 四、建立Bank.java 五、建立BankCard.

GPU中實現反距離加權插值(IDW)

GPU中實現反距離加權插值(IDW) 利用GPU實現IDW(反距離加權插值) IDW的實現比較簡單,已知插值點位比較少的情況下,可以直接遍歷所有插值點,來獲取臨近的幾個點,進行插值運算。插值點較多時,需要可以使用 kd-tree 來加速臨近點的查找。本次僅對 小數據量 情

前端實現一個小說分頁的功能

前端實現一個小說分頁的功能 來源 | https://juejin.im/post/6886418644381728776 先讓我找找我的思路在哪里? 在小說讀書APP中,都會有分頁的功能,那么前端如何實現這個功能呢? 因為沒有什么思路,那就只能在前輩的項目中尋找思路了。 這不,直接打開起點

centos7 docker容器內實現動態maven打包

centos7 docker容器內實現動態maven打包 背景:業務需要動態更新maven依賴,目前想到的辦法是動態打包執行jar實現。已有centos7鏡像且已安裝java sdk。 linux下安裝maven環境 官網下載安裝包:http://maven.apache.org/download.cgi cd /mkdir optcd opt# 下

總結

以上是生活随笔為你收集整理的matlab如何看算法时间,【Matlab实现】动态时间规划调整算法(DTW算法)——计算两个序...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。