В Matlab, в том, какая точка имеет разреженный массив лучше, чем нормальный массив, если у меня все еще есть много вычислений, чтобы сделать на нем, и приблизительно 25% массива, ненули?
Лично я бы редко беспокоился о sparse для массива, который только на 25% ненулевой. Если не верите, попробуйте сами.
A = sprand(2000,2000,0.25);
tic,B = A*A;toc
Elapsed time is 1.771668 seconds.
Af = full(A);
tic,B = Af*Af;toc
Elapsed time is 0.499045 seconds.
Дополнительная работа, связанная с этой разреженной матрицей, стоит слишком дорого, чтобы того стоить. Теперь попробуйте это с действительно разреженной матрицей.
A = sprand(2000,2000,0.005);
Af = full(A);
tic,B = A*A;toc
Elapsed time is 0.037763 seconds.
tic,B = Af*Af;toc
Elapsed time is 0.446680 seconds.
Конечно, ваша собственная проблема будет другой, но не такой уж и иной. Редкие матрицы - настоящее благо для человека, который использует действительно разреженные матрицы, но 25% ненулевых просто недостаточно «разреженных» для любого выигрыша в большинстве случаев.
Править - неправильно прочитал вопрос.
При 75% разреженности вы вполне можете увидеть значительное увеличение производительности с алгоритмами разреженных матриц. Я бы сказал, что попробовать стоит.
Два места, где вы будете экономить: память (сокращение использования памяти в четыре раза) и операции (например, каждый раз, когда вы выполняете умножение матрицы на вектор, вы значительно сокращаете количество требуемых операций. ). Смягчающим фактором в вашем случае вполне может быть размер вашей матрицы. Переходя к работе с разреженной матрицей, вы обычно теряете хорошие характеристики кэширования, которые вы наблюдаете с плотными матрицами. Таким образом, обычно существует порог, при котором переход от плотного к разреженному приводит к повышению эффективности.