我想使用DynamicTimeWarping(DTW)的输出进行分类。事实证明,动态时间规整算法的输出仍然需要后处理。作为时间对齐过程的一部分,数据A的某些单个数据点将映射到数据B上的多个数据点。我计划将数据A上的这些数据点的平均值映射到单个数据点到数据B.最终输出将是针对相似性优化的数据之间的一对一映射数据点。然后我将使用此最终输出进行分类。
输入将是一个文件:(索引数据A,索引数据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行),没有编译或运行时错误。命令行中的光标只是闪烁。感谢您抽出时间帮助我。
答案 0 :(得分:1)
您的程序正在等待来自命令行的输入,因为您已为Scanner
流创建了System.in
。你需要从中读取文件。
File file = new File("fileName");
Scanner scannerFile = new Scanner(file);
while(scannerFile.hasNextLine()){
String line = scannerFile.nextLine();
String[] lineVector = line.split(",");
}