Last active
August 29, 2015 14:04
-
-
Save floswald/6dea493417912536688d to your computer and use it in GitHub Desktop.
tensorgrid
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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