Member 14129828 Ответов: 1

Как конвертировать csv в 2 массива данных и классов?


Я хочу сделать и-операцию, мой csv-это
0,0,0
0,1,0
1,0,0
1,1,1

Я хочу получить 2 массива: входной и выходной массив
ввод данных)
0,0
0,1
1,0
1,1
классы (выходные данные)
0
0
0
1
Я пробую этот код:

Что я уже пробовал:

double[][] input = new double[samples][];
double[][] output = new double[samples][];
public static void convertCSV()
        {
            StreamReader reader = new StreamReader("D:\\and.csv");
            samples = 0;
            
            try
            {
                string str = null;
                while((samples<50)&&((str=reader.ReadLine())!=null))
                {
                    string[] strs = str.Split(';');
                    if (strs.Length == 1)
                        strs = str.Split(',');
                    
                    //// parse tokens
                    tempData[samples, 0] = double.Parse(strs[0]);
                    tempData[samples, 1] = double.Parse(strs[1]);
                    tempClasses[samples] = int.Parse(strs[2]);

                    
                    samples++;
                  
                }
                data = new double[samples, 2];
                Array.Copy(tempData, 0, data, 0, samples * 2);
                classes = new int[samples];
                Array.Copy(tempClasses, 0, classes, 0, samples);

                
            }
            catch(Exception)
            {
                return;
            }
            finally
            {
                if (reader != null)
                    reader.Close();
            }
        }
        public static void SearchSolution()
        {
            // prepare learning data
            
            for (int i = 0; i < samples; i++)
            {
                input[i] = new double[2];
                output[i] = new double[1];

                //// set input
                input[i][0] = data[i, 0];
                input[i][1] = data[i, 1];

                //// set output
                output[i][0] = classes[i];

               
                }
            //}
        }


мой код не может дать моим 2 массивам использовать его в обучении, я хочу получить некоторую помощь, если это возможно, пожалуйста

CHill60

Что происходит, когда вы запускаете и отлаживаете свой код?
Это плохая конструкция

catch(Exception)
            {
                return;
            }
потому что вы никогда не узнаете, какая ошибка произошла.
Вы еще не объявили об этом tempData или tempClasses - может быть, это твоя проблема?

Richard MacCutchan

Ваш код, по-видимому, не делает ничего, кроме попыток прочитать цифры и перемещать их с места на место. Сначала вы считываете их в tempData, а затем копируете в данные, чтобы в конечном итоге скопировать их оттуда на вход и выход. Чего именно вы пытаетесь достичь?

Member 14129828

Я хочу отделить входные данные от выходных, чтобы использовать их в обучении с помощью
trainingSet = новый BasicNeuralDataSet(вход, выход);

Richard MacCutchan

Смотрите мое решение ниже.

1 Ответов

Рейтинг:
6

Richard MacCutchan

Следующий код разделит ваши данные на два объявленных массива:

static int samples = 4;    // adjust this to the actual number to be processed

static double[,] input = new double[samples,2];
static double[] output = new double[samples];

public static void convertCSV()
{
    StreamReader reader = new StreamReader("D:\\and.csv");
    int index = 0;
    
    try
    {
        string str;
        while(index < samples && (str = reader.ReadLine()) != null)
        {
            string[] strs = str.Split(';');
            if (strs.Length == 1)
                strs = str.Split(',');
            
            // parse tokens
            input[index,0] = double.Parse(strs[0]);
            input[index,1] = double.Parse(strs[1]);
            output[index] = double.Parse(strs[2]);
            index++;
        }
    }
    catch(Exception e)
    {
        // do something here, do not ignore exceptions
        Console.WriteLine(e.Message);
    }
    finally
    {
        if (reader != null)
        reader.Close();
    }
}