indirect array indexing

104 views
Skip to first unread message

apao...@gmail.com

unread,
Sep 30, 2016, 9:53:43 AM9/30/16
to julia-users
Hi guys,

I'm learning the language while implementing an advanced package for geometric and solid modeling.
My question is: What is the right idiom (shorter and/or faster) for writing this kind of array indexing:

linesFromLineArray(V,EV) = Any[[V[:,EV[:,k][1]] V[:,EV[:,k][2]]  ] for k=1:size(EV,2)]

The efficiency is the strongest issue, since this method should provide the indirect indexing for any kind of cellular complexes.
Many thanks for your help


julia> V,EV
(
2x10 Array{Float64,2}:
 0.13611  0.14143  0.38501  0.42103  0.96927  0.90207  0.0     0.11508  0.61437  0.52335
 0.59824  0.58921  0.25964  0.24118  0.19741  0.34109  0.0213  0.0      0.05601  0.17309,

2x5 Array{Int64,2}:
 1  3  5  7   9
 2  4  6  8  10)

julia> linesFromLineArray(V,EV)
5-element Array{Any,1}:
 2x2 Array{Float64,2}:
 0.13611  0.14143
 0.59824  0.58921
 2x2 Array{Float64,2}:
 0.38501  0.42103
 0.25964  0.24118
 2x2 Array{Float64,2}:
 0.96927  0.90207
 0.19741  0.34109
 2x2 Array{Float64,2}:
 0.0     0.11508
 0.0213  0.0      
 2x2 Array{Float64,2}:
 0.61437  0.52335
 0.05601  0.17309

vav...@uwaterloo.ca

unread,
Sep 30, 2016, 8:52:17 PM9/30/16
to julia-users
First, it is better to use a 3-dimensional array rather than an array of arrays.  If you must use an array of arrays, it is better for the outer array to be of type Array{Array{Float,2},1} rather than Array{Any,1}.

For max performance, it is hard to beat explicit loops:

result = Array(Float64, size(V,1), 2, size(EV,2))
for k = 1 : size(EV,2)
    for j = 1 : 2
         for i = 1 : size(V,1)
               result[i,j,k] = V[i,EV[j,k]]
         end
     end
end

There are some macro packages like Einsum.jl that let you hide the explicit loops.

-- Steve Vavasis

apao...@gmail.com

unread,
Sep 30, 2016, 11:51:25 PM9/30/16
to julia-users
OK!  many thanks for your fast reply
--a

Tim Holy

unread,
Oct 1, 2016, 4:30:06 AM10/1/16
to julia...@googlegroups.com
For simple cases there's also the IndirectArrays package: https://github.com/JuliaArrays/IndirectArrays.jl

Best,
--Tim
Reply all
Reply to author
Forward
0 new messages