В Matlab, в какой точке имеется разреженный массив лучше обычного массива, если у меня все еще есть много вычислений, и около 25% массива не являются нулями?Sparse vs Normal Array Matlab
ответ
Лично я редко бывал с разреженным массивом, который составляет всего 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% non-zeros просто недостаточно «разрежены» для любой выгоды в большинстве случаев.
Редактировать - неправильно прочитать quesiton.
С разрешающей способностью 75% вы можете очень хорошо видеть значительное увеличение производительности с помощью разреженных матричных алгоритмов. Я бы сказал, что это определенно стоит попробовать.
В двух местах, где вы будете экономить память (уменьшая использование памяти в четыре раза) и операции (каждый раз, когда вы умножаете матричный вектор, например, вы значительно уменьшаете количество операций обязательный). Фактор смягчения в вашем случае, вполне может быть размер вашей матрицы. Переходя к разреженной матричной операции, вы обычно теряете хорошие характеристики кэширования, которые вы видите с плотными матрицами. Таким образом, обычно существует порог, когда переход от плотного к разреженному приводит к повышению эффективности.