как конвертировать файл arff в матрицу - PullRequest
0 голосов
/ 31 марта 2019

У меня есть 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));
}

1 Ответ

0 голосов
/ 31 марта 2019

Предполагая, что вы хотите double[][], действуйте следующим образом:

Соберите все double[] s в ArrayList<double[]>.

В конце используйте list.toarray(new double[list.size()][]) илианалогично преобразованию списка динамической длины в массив fixed length.

Или вы непосредственно выделяете выходной массив, поскольку Instances уже знает количество атрибутов и экземпляров.

Остерегайтесь, что double[][] не является строго матрицей.Он может быть рваным, то есть строки могут иметь различную длину.Кроме того, приведенный выше код будет производить транспонированную матрицу, вероятно, не то, что вы ожидаете.Скорее всего, вы захотите перебрать экземпляры и использовать instance.toDoubleArray().

Любым способом проверьте исходный код attributeToDoubleArray, чтобы понять, что Weka делает внутри, чтобы дать вам некоторые идеи, как действовать.

...