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