码迷,mamicode.com
首页 > 其他好文 > 详细

MATLAB稀疏矩阵indexing效率比较

时间:2014-11-26 22:46:34      阅读:317      评论:0      收藏:0      [点我收藏+]

标签:indexing

试验中需要处理大的稀疏矩阵,由于要频繁对稀疏矩阵进行取块操作,搜索了Index对行列操作哪个快?

发现丕子的博文称对稀疏矩阵取块行要比列快,但我实际测试发现列比行快。

使用的行数2x10^7,列数3x10^5的稀疏矩阵,将这个矩阵转置发现占用内存稍微增加,如下图1:

S                22530343x429498              2400827800  double    sparse    
S_transpose        429498x22530343            2577634560  double    sparse

分别取S矩阵前10^6,10^5,10^4行,和相应的S_transpose的前10^6,10^5,10^4列,所用时间发现取列比行快很多,如下图:

>> untitled3
Elapsed time is 2.170296 seconds.
Elapsed time is 0.067666 seconds.
>> untitled3
Elapsed time is 1.799833 seconds.
Elapsed time is 0.004293 seconds.
>> untitled3
Elapsed time is 1.690028 seconds.
Elapsed time is 0.000631 seconds.

在MATLAB中显示一个10*10的稀疏矩阵,发现以列为优先书序打出,那么暂时推测其存储时是列优先的。

temp =

   (1,1)        1
   (1,2)        1
   (1,3)        1
   (1,4)        1
  (10,4)        1
   (1,5)        1
   (1,6)        1
   (1,7)        1
   (5,7)        1
   (1,8)        1
   (5,8)        1
   (1,9)        1
   (1,10)       1

不知有哪位大神知根知底的来给解释下。

下面再来探讨另一个问题:如果需要得到矩阵S的某些行,是直接取S中的行效率高,还是将S转置,然后取相应的列,然后在把得到的列转置效率高,(当然这里不计S转置的时间,因为这里的应用场景是S转置只需一次,而取S的某些行要很多次的情况)

下面测试了取S的前10^5,10^6,10^7行和取S_transpose相应的前10^5,10^6,10^7行,然后再转置所需的时间对比,发现取行然后转置时间更快点:

>> untitled3
Elapsed time is 1.869449 seconds.
Elapsed time is 0.018637 seconds.
>> untitled3
Elapsed time is 1.958603 seconds.
Elapsed time is 0.243565 seconds.
>> untitled3
Elapsed time is 2.541002 seconds.
Elapsed time is 2.488429 seconds.



MATLAB稀疏矩阵indexing效率比较

标签:indexing

原文地址:http://blog.csdn.net/muzixiaozi/article/details/41519795

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!