2010-07-20 3 views
11

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

ответ

21

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

4

Редактировать - неправильно прочитать quesiton.

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

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