Как преобразовать многомерный массив в зубчатый? (С#)

Для проекта у меня есть многомерный массив (double[,]), содержащий двойные значения. Поскольку я использую метод из структуры Accord, который ожидает получить зубчатый массив двойных значений (double[][]), мне нужно преобразовать одно в другое. Однако, используя приведенный ниже код, я замечаю, что никогда не достигаю inputs[k] = row; утверждение.

double[][] inputs = new double[165][];

// Loop through # of rows
for (int k = 0; k < pcaComponents.GetLength(1); k++)
{
       double[] row = new double[20];

       // Loop through # of columns
       for (int l = 0; l < pcaComponents.GetLength(0); l++)
       {
            row[k] = pcaComponents[k, l];
       }
        inputs[k] = row;
}

pcaComponents имеет тип double[,] и передается из другого фрагмента кода. Используя свойство getLength, я вижу, что когда я передаю 1, результат равен 165, что является количеством строк, а при передаче 0 я вижу, что результат равен 20, что является количеством столбцов. Затем я пытаюсь создать новую строку для зубчатого массива со значениями из многомерного массива. Он проходит 2-й цикл 20 раз, но, похоже, не достигает inputs[k] = row; оператор и не продолжает 1-й цикл, где pcaComponents.GetLength(1) равно 165.


person Redesign1991    schedule 21.04.2015    source источник
comment
Вы как-то путаете строки и столбцы, pcaComponents[k, l] означает, что k должно быть связано с pcaComponents.GetLength(0)   -  person Henk Holterman    schedule 21.04.2015


Ответы (1)


Я думаю, вы должны заменить свою линию

row[k] = pcaComponents[k, l];

тем одним

row[l] = pcaComponents[k, l];

Переменная вашего внутреннего цикла l не k

И, возможно, вам следует использовать GetLength для определения размера ваших массивов:

double[] row = new double[pcaComponents.GetLength(0)];
person Fratyx    schedule 21.04.2015
comment
Какая глупая ошибка, которую так легко не заметить, спасибо, что указали на нее! - person Redesign1991; 21.04.2015