Thanks Kevin, will try SubArrays first.

On Tuesday, December 2, 2014 10:34:17 AM UTC+8, Tim Holy wrote:
>
> On Monday, December 01, 2014 06:25:45 PM Todd Leo wrote: 
> >> I've also tried ArrayViews on my previous applications, except 
> ArrayViews 
> > does not support sparse matrices. Will check on Linda Hua's source code 
> and 
> > try to implement views on sparse matrices soon. 
>
> A potentially easier path: SubArrays support views of sparse matrices. 
> It's 
> also worth noting that in julia 0.4, SubArrays have been improved and have 
> performance similar to (or better than) ArrayViews. 
>
> --Tim 
>
> > 
> > -- 
> > REGARDS, 
> > Todd Leo 
> > 
> > On Monday, December 1, 2014 8:55:15 PM UTC+8, Milan Bouchet-Valat wrote: 
> > > Le lundi 01 décembre 2014 à 02:50 +0000, SLiZn Liu a écrit : 
> > > > I have a n by m dense matrix, and each row is a vector 
> > > > representing variating flows like stock price, and I'd like to find 
> > > > out the two vectors which have the highest similarity using cor(). 
> > > > Hence, a nested for-loop was utilized to calculate the similarity 
> > > > between each pair, and fill the similarity into an n by n adjacency 
> > > > matrix. 
> > > 
> > > In that case you can simply use the Distances.jl package like this: 
> > > pairwise(CorrDist(), x) 
> > > 
> > > (Though this will compute correlations between columns, not rows. And 
> > > the distance is 1 - correlation.) 
> > > 
> > > 
> > > If you look at the code it uses by calling 
> > > edit(pairwise!) 
> > > 
> > > you'll see that it relies on array views to avoid creating copies of 
> the 
> > > columns. 
> > > 
> > > 
> > > Regards 
> > > 
> > > > On Fri Nov 28 2014 at 8:49:51 PM Milan Bouchet-Valat 
> > > > 
> > > > <[email protected] <javascript:>> wrote: 
> > > >         Le vendredi 28 novembre 2014 à 10:21 +0000, SLiZn Liu a 
> > > >         
> > > >         écrit : 
> > > >         > I'm doing row-wise/col-wise calculation, isn't it 
> inevitable 
> > > >         
> > > >         to create 
> > > >         
> > > >         > row/col copies after iteratively extract single elements? 
> > > >         
> > > >         No, I don't think so, though sometimes you'll want to 
> extract 
> > > >         a full 
> > > >         row/column to pass it to a standard function instead of 
> > > >         writing all of 
> > > >         the computations by hand. That's where array views are very 
> > > >         useful. 
> > > >         
> > > >         But can you give more details about the calculation you need 
> > > >         to do? 
> > > >         
> > > >         
> > > >         Regards 
> > > >         
> > > >         > I will consider to take a shot on option 1, ArrayViews if 
> > > >         
> > > >         this 
> > > >         
> > > >         > single-element-extraction comes to a dead end. Thanks, 
> > > >         
> > > >         Milan! 
> > > >         
> > > >         > On Fri Nov 28 2014 at 6:00:07 PM Milan Bouchet-Valat 
> > > >         > 
> > > >         > <[email protected] <javascript:>> wrote: 
> > > >         >         Le vendredi 28 novembre 2014 à 01:45 -0800, Todd 
> Leo 
> > > >         
> > > >         a écrit : 
> > > >         >         > Hi Fellows, 
> > > >         >         > 
> > > >         >         > 
> > > >         >         > Say I have a 1000 x 1000 matrix, and I'm going 
> to 
> > > >         
> > > >         do some 
> > > >         
> > > >         >         calculation 
> > > >         >         
> > > >         >         > in a nested for-loop, with each pair of 
> rows/cols 
> > > >         
> > > >         in the 
> > > >         
> > > >         >         matrix. But I 
> > > >         >         
> > > >         >         > suffered a heavy performance penalty in row/col 
> > > >         
> > > >         extraction. 
> > > >         
> > > >         >         Here's my 
> > > >         >         
> > > >         >         > minimum reproducible example, which I hope 
> > > >         
> > > >         explains itself. 
> > > >         
> > > >         >         > A = rand(0.:0.01:1.,1000,1000) 
> > > >         >         > 
> > > >         >         > 
> > > >         >         > function test(x) 
> > > >         >         > 
> > > >         >         >     for i in 1:1000, j in 1:1000 
> > > >         >         >     
> > > >         >         >         x[:,i] 
> > > >         >         >         x[:,j] 
> > > >         >         >     
> > > >         >         >     end 
> > > >         >         > 
> > > >         >         > end 
> > > >         >         > 
> > > >         >         > 
> > > >         >         > test(A) # warm up 
> > > >         >         > gc() 
> > > >         >         > @time test(A) 
> > > >         >         > ## elapsed time: 13.28547939 seconds 
> (16208000080 
> > > >         
> > > >         bytes 
> > > >         
> > > >         >         allocated, 
> > > >         >         
> > > >         >         > 72.42% gc time) 
> > > >         >         > 
> > > >         >         >  It takes 13 seconds, only extracting the 
> > > >         
> > > >         rows/cols for the 
> > > >         
> > > >         >         sake of 
> > > >         >         
> > > >         >         > further calculations. I'm wondering if anything 
> I 
> > > >         
> > > >         could do 
> > > >         
> > > >         >         to improve 
> > > >         >         
> > > >         >         > the performance.Thanks in advance. 
> > > >         >         
> > > >         >         This is because extracting a row/column creates a 
> > > >         
> > > >         copy. 
> > > >         
> > > >         >         Depending on 
> > > >         >         what calculation you want to do on them, you can: 
> > > >         >         - use arrays views (which will become the default 
> > > >         
> > > >         when 
> > > >         
> > > >         >         extracting slices 
> > > >         >         in 0.4): 
> https://github.com/JuliaLang/ArrayViews.jl 
> > > >         >         - manually write loops to go over the row and 
> column 
> > > >         
> > > >         so that 
> > > >         
> > > >         >         you only 
> > > >         >         extract one individual element of the matrix at a 
> > > >         
> > > >         time 
> > > >         
> > > >         >         Regards 
>
>

Reply via email to