Skip to content

Instantly share code, notes, and snippets.

@floswald
Last active August 29, 2015 14:04
Show Gist options
  • Save floswald/6dea493417912536688d to your computer and use it in GitHub Desktop.
Save floswald/6dea493417912536688d to your computer and use it in GitHub Desktop.
tensorgrid
# approximating tensor grids
# computing the approximating coefficients on
# a tensor product of basis functions
# NOTE: the fastest varying index in v is the one with highest
# index in ibm
function getTensorCoef{T<:Real}(ibm::Dict{Integer,Array{T,2}},v::Vector{T})
# ibm are usually inverse basis matrices
nall = length(v) # length value vector
nbm = length(ibm) # number of basis functions / dimensions of v
# dim(matrices) must be same as length v
prod = 1
for (k,va) in ibm
prod *= size(va,1)
if !(size(va,1) == size(va,2))
throw(ArgumentError("all matrices must be square"))
end
end
if !(prod == nall)
throw(ArgumentError("sizes of matrices not consistent with v"))
end
# compute product for first matrix
ks = sort(collect(keys(ibm)))
v0 = copy(v)
stemp = ibm[ks[1]]
n = size(stemp,1)
m = nall / n
v1 = zeros(nall)
for i in 1:m
v1[m*(0:(n-1)) + i] = stemp * v0[(n*(i-1)) + (1:n)]
end
# compute for all other matrics
if nbm > 1
for imat in 2:nbm
v0 = copy(v1)
stemp = ibm[ks[imat]]
n = size(stemp,1)
m = nall / n
# fill!(v1,0.0)
for i in 1:m
v1[m*(0:(n-1)) + i] = stemp * v0[(n*(i-1)) + (1:n)]
end
end
end
return v1
end
# running the test
d = Dict{Integer,Array{Float64,2}}()
for i=1:4
d[i] = rand(10+i,10+i)
end
y = rand(11*12*13*14)
function myfun()
for i in 1:100
getTensorCoef(d,y)
end
end
@profile myfun()
julia> Profile.print()
1 LineEdit.jl; activate; line: 1304
1 LineEdit.jl; activate; line: 1299
1 LineEdit.jl; refresh_multi_line; line: 953
5 abstractarray.jl; stride; line: 30
1 array.jl; getindex; line: 271
14 array.jl; setindex!; line: 337
1 dict.jl; ht_keyindex; line: 469
1 linalg/blas.jl; gemv!; line: 263
10 linalg/matmul.jl; gemv!; line: 207
2 operators.jl; to_index; line: 309
11152 task.jl; anonymous; line: 96
11152 REPL.jl; eval_user_input; line: 54
11152 profile.jl; anonymous; line: 14
11152 none; myfun; line: 3
2 ...swald/git/BSplines.jl/src/approx.jl; getTensorCoef; line: 32
1 array.jl; collect; line: 226
1 array.jl; collect; line: 228
1 dict.jl; skip_deleted; line: 669
2 ...swald/git/BSplines.jl/src/approx.jl; getTensorCoef; line: 34
1 dict.jl; ht_keyindex; line: 479
535 ...swald/git/BSplines.jl/src/approx.jl; getTensorCoef; line: 37
329 ...swald/git/BSplines.jl/src/approx.jl; getTensorCoef; line: 38
3812 ...swald/git/BSplines.jl/src/approx.jl; getTensorCoef; line: 39
2244 array.jl; getindex; line: 271
281 operators.jl; to_index; line: 309
26 array.jl; setindex!; line: 337
23 array.jl; setindex!; line: 344
108 array.jl; setindex!; line: 345
2 array.jl; setindex!; line: 348
32 linalg/matmul.jl; gemv!; line: 207
1 linalg/matmul.jl; gemv!; line: 208
2 linalg/matmul.jl; gemv!; line: 209
2 linalg/matmul.jl; gemv!; line: 211
4 linalg/matmul.jl; gemv!; line: 213
1 linalg/matmul.jl; gemv!; line: 215
9 linalg/matmul.jl; gemv!; line: 216
997 linalg/matmul.jl; gemv!; line: 217
1 abstractarray.jl; stride; line: 37
8 linalg/blas.jl; gemv!; line: 263
7 linalg/blas.jl; gemv!; line: 264
977 linalg/blas.jl; gemv!; line: 265
5 abstractarray.jl; stride; line: 30
1 abstractarray.jl; stride; line: 34
1 ...swald/git/BSplines.jl/src/approx.jl; getTensorCoef; line: 45
23 ...swald/git/BSplines.jl/src/approx.jl; getTensorCoef; line: 46
1 dict.jl; ht_keyindex; line: 469
6 dict.jl; ht_keyindex; line: 479
724 ...swald/git/BSplines.jl/src/approx.jl; getTensorCoef; line: 50
5691 ...swald/git/BSplines.jl/src/approx.jl; getTensorCoef; line: 51
3791 array.jl; getindex; line: 271
1725 operators.jl; to_index; line: 309
21 array.jl; setindex!; line: 337
42 array.jl; setindex!; line: 344
246 array.jl; setindex!; line: 345
5 array.jl; setindex!; line: 348
1 linalg/blas.jl; gemv!; line: 272
21 linalg/matmul.jl; gemv!; line: 207
1 linalg/matmul.jl; gemv!; line: 211
2 linalg/matmul.jl; gemv!; line: 213
1 linalg/matmul.jl; gemv!; line: 214
2 linalg/matmul.jl; gemv!; line: 215
9 linalg/matmul.jl; gemv!; line: 216
814 linalg/matmul.jl; gemv!; line: 217
3 abstractarray.jl; stride; line: 37
6 linalg/blas.jl; gemv!; line: 263
7 linalg/blas.jl; gemv!; line: 264
789 linalg/blas.jl; gemv!; line: 265
4 abstractarray.jl; stride; line: 30
6 linalg/blas.jl; gemv!; line: 272
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment