Ошибка OutOfMemoryException при создании матрицы - C#
Формулировка задачи:
Пытаюсь создать матрицу
Выдает ошибку "Выдано исключение типа "System.OutOfMemoryException"."
что это и как с этим можно боротся?
maxi = 14357 maxj = 2515 double[,] res = new double[maxi, maxj];
Решение задачи: «Ошибка OutOfMemoryException при создании матрицы»
textual
Листинг программы
// Сжатие public static double[,] zipMatrix(double[,] A) { List<int> indx = new List<int>(); List<int> jndx = new List<int>(); List<double> val = new List<double>(); for (int i = 0; i < A.GetLength(0); i++) { for (int j = 0; j < A.GetLength(1); j++) { if(A[i,j]!=0){ indx.Add(i+1); jndx.Add(j+1); val.Add(A[i,j]); } } } int[] indxI = indx.ToArray(); int[] indxJ = jndx.ToArray(); double[] val2 = val.ToArray(); double[,] res = new double[indxI.Length, 3]; for (int i = 0; i < indxI.Length; i++) { res[i, 0] = indxI[i]; res[i, 1] = indxJ[i]; res[i, 2] = val2[i]; } return res; } // Умноже сжатых матриц // Правда тут из за того что изначально нужно знать размеры результирующей матрицы, то присувствуют два лишних цикла по нахождению максимума в пеивом столбцу первой матрицы(что равно количеству строк в результирующей) и максимальное значение со второго столбца второй матрицы(что равно количеству столбцов результирующей). И это при больших матрицах отнимает слишком много драгоценного времени. У меня примерно 35 секунд, и сейчас я думаю как это можно оптимизировать. но ничего придумать не могу, если у кого нибуть будут какие идеи буду рад усоышать public static double[,] multiZipMatrix(double[,] A, double[,] B,bool q) { //q = true значит получить zip matrix int maxi = 0; for (int i = 0; i < A.GetLength(0); i++) if (A[i, 0] > maxi) maxi = (int)A[i, 0]; int maxj = 0; for (int i = 0; i < B.GetLength(0); i++) if (B[i, 1] > maxj) maxj = (int)B[i, 1]; double[,] res = new double[maxi, maxj]; for (int i = 0; i < A.GetLength(0); i++) { for (int j = 0; j < B.GetLength(0); j++) { if (A[i, 1] == B[j, 0]) { res[(int)A[i, 0] - 1, (int)B[j, 1] - 1] = res[(int)A[i, 0] - 1, (int)B[j, 1] - 1] + A[i, 2] * B[j, 2]; } } } if (q) { double[,] res2 = zipMatrix(res); return res2; } else { return res; } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д