我有arff文件需要转换为矩阵。我已经将文件转换为数组,但无法将其转换为矩阵。有人可以帮忙吗? 下面有我用来将数据转换为数组的代码
BufferedReader reader = new BufferedReader(new FileReader("colon.arff"));
ArffReader arff = new ArffReader(reader);
Instances data = arff.getData();
data.setClassIndex(data.numAttributes() - 1);
for (int i = 0; i < data.numAttributes(); i++)
{
// Print the current attribute.
System.out.print(data.attribute(i) + ": ");
// Print the values associated with the current attribute.
double[] values = data.attributeToDoubleArray(i);
//data= new double [row][col];
System.out.println(Arrays.toString(values));
}
答案 0 :(得分:0)
假设您要使用double[][]
,请按照以下步骤操作:
收集double[]
中的所有ArrayList<double[]>
。
最后,使用list.toarray(new double[list.size()][])
或类似的命令将动态长度列表转换为固定长度的数组。
或者您直接分配输出数组,因为Instances
已经知道属性和实例的数量。
请注意,double[][]
并不是严格意义上的矩阵。它可能参差不齐,即行的长度可能不同。此外,以上代码将产生转置矩阵,可能不是您所期望的。您可能需要遍历实例并改为使用instance.toDoubleArray()
。
通过任何方式,请查看attributeToDoubleArray
的源代码,以了解Weka在内部进行的操作,从而为您提供一些进行下一步的想法。