Я получаю исключение нехватки памяти при выполнении этой строки кода:
double[,] _DataMatrix = new double[_total_traces, _samples_per_trace];
Но этот код успешно завершается:
double[][] _DataMatrix = new double[_total_traces][];
for (int i = 0; i < _total_traces; i++)
{
_DataMatrix[i] = new double[_samples_per_trace];
}
Мой первый вопрос: почему это происходит?
В качестве дополнительного вопроса моя конечная цель - провести анализ основных компонентов (PCA) для этих данных.Это довольно большой набор данных.Количество «строк» в матрице может составить пару миллионов.Количество «столбцов» будет около 50. Я нашел библиотеку PCA в структуре Accord.net, которая кажется популярной.Он принимает зазубренный массив в качестве входных данных (который я могу успешно создать и заполнить данными), но у меня заканчивается память, когда я передаю его в PCA - я думаю, потому что он передается по значению и создает копию данных (?),Моей следующей мыслью было написать собственный метод для проведения PCA, чтобы мне не пришлось копировать данные, но я еще не дошел до этого.На самом деле раньше мне не приходилось иметь дело с управлением памятью, так что я открыт для советов.
Редактировать: Это не дубликат темы, указанной ниже, потому что эта ссылка не объясняет, как памятьдва из них хранились по-разному, и почему один из них может вызвать проблемы с памятью, несмотря на то, что оба они имеют одинаковый размер.