1
我想使用DynamicTimeWarping(DTW)的輸出進行分類。事實證明,動態時間規整算法的輸出仍然需要後處理。作爲時間對齊過程的一部分,數據A的某些單個數據點將被映射到數據B上的多個數據點。我計劃將這些數據點上的這幾個數據點的平均值映射到單個數據點到數據B.最終輸出將是針對相似性進行了優化的數據之間的一對一映射數據點。然後我將使用這個最終輸出進行分類。程序沒有輸出(預計408行),沒有編譯或運行時錯誤
的投入將一個文件:(索引數據,索引數據B,內容數據A)是這樣的:
0,0,0.36
1,0,0.23
2,0,0.14
3,1,0.41
4,1,0.44
5,2,0.16
6,2,0.03
7,2,0.09
以下是我當前的代碼:
import java.util.*;
public class dtw_post {
public static void main(String[] args) throws Exception {
Scanner scan = new Scanner(System.in);
int N = 655;
int x = 408;
while(scan.hasNextLine()){
String line =scan.nextLine();
String[] lineVector = line.split(",");
int a[] = new int[N];
int b[] = new int[N];
double c[] = new double[x];
for(int i = 0; i<N; i++)
{
a[i]=Integer.parseInt(lineVector[0]);
b[i]=Integer.parseInt(lineVector[1]);
}
for(int i = 0; i<x; i++){
c[i]=Double.parseDouble(lineVector[2]);
}
System.out.println(dtw_post.lookup(a,b,c));}
}
static String[] lookup (int[] a, int[] b, double[] c){
String[] final_result = new String[c.length];
for(int i=0; i<a.length; i++){
if (a[i+1] > a[i] && b[i] == b[i+1]) {
double[] d = {c[a[i]],c[a[i+1]]};
double e = average(d);
final_result[i] = Double.toString(e);
}
else {
final_result[i] = Double.toString(c[a[i]]);
}}
return final_result;
}
static double average(double[] data) {
double sum = 0;
int number = 0;
for (double val : data) {
++number;
sum += val;
}
return sum/number;
}
}
程序沒有輸出(預計408行),無編譯或運行時錯誤。命令行中的光標正在閃爍。謝謝你的時間幫助我。
它的工作原理。然而,它給出如下輸出:'[Ljava.lang.String; @ 7e774085 [Ljava.lang.String; @ 3f8f9dd6 [Ljava.lang.String; @ aec6354 [Ljava.lang.String; @ 1c655221 [ Ljava.lang.String; @ 58d25a40 [Ljava.lang.String; @ 1b701da1 [Ljava.lang.String; @ 726f3b58'還有什麼問題?謝謝。 – ARSN
我想通了。謝謝。 – ARSN