Редкий против нормального массива Matlab

В Matlab, в какой точке имеется разреженный массив лучше обычного массива, если у меня все еще есть много вычислений, и около 25% массива являются не-нулями?

Ответ 1

Лично я редко бывал с редкими для массива, который составляет всего 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-нули просто недостаточно "разрежены" для любой выгоды в большинстве случаев.

Ответ 2

Изменить - неправильно прочитать quesiton.

С 75% -ной разрешающей способностью вы можете очень хорошо увидеть значительное увеличение производительности с помощью разреженных матричных алгоритмов. Я бы сказал, что это определенно стоит попробовать.

В двух местах, где вы будете экономить память (уменьшая использование памяти в четыре раза) и операций (каждый раз, когда вы умножаете матричный вектор, например, вы значительно сократите количество требуемых операций). Фактор смягчения в вашем случае, вполне может быть размер вашей матрицы. Переходя к разреженной матричной операции, вы обычно теряете хорошие характеристики кэширования, которые вы видите с плотными матрицами. Таким образом, обычно существует порог, в котором увеличение от плотного до разреженного приводит к повышению эффективности.