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