Comments (4)
It's in fact much larger, as you want @cast res[k][i,j] := A[i,j,k]
to match the (opaque?) meaning of that 2
.
Although I'm not sure this difference matters much. Anything which makes or consumers this many slices is likely to be much more expensive. This assumption is why this package makes a simple Vector{SubArray{...
rather than its own array type. Once JuliaLang/Compat.jl#663 lands, it can switch to using Base's Slices type.
Do you have a real use in which this cost isn't negligible?
Note also that type-stability tends to matter for anything downstream of call:
julia> @code_warntype nestedview(A, 2)
...
Static Parameters
T = Float64
L = 3
Arguments
#self#::Core.Const(ArraysOfArrays.nestedview)
A::Array{Float64, 3}
M::Int64
Body::ArrayOfSimilarArrays{Float64, _A, _B, 3, Array{Float64, 3}} where {_A, _B}
...
julia> tc(A) = @cast res[k][i,j] := A[i,j,k];
julia> @code_warntype tc(A)
MethodInstance for tc(::Array{Float64, 3})
from tc(A) @ Main REPL[482]:1
Arguments
#self#::Core.Const(tc)
A::Array{Float64, 3}
Locals
...
Body::Vector{SubArray{Float64, 2, Array{Float64, 3}, Tuple{Base.Slice{Base.OneTo{Int64}}, Base.Slice{Base.OneTo{Int64}}, Int64}, true}}
from tensorcast.jl.
Maybe worth adding that for tiny arrays, there is also an option to make SMatrix slices, which will often be faster downstream. With perhaps slightly weird notation:
julia> @btime @cast res[k][i,j] := $A[i,j,k];
min 21.833 μs, mean 78.062 μs (4 allocations, 468.81 KiB)
julia> @btime @cast res[k]{i,j} := $A[i,j,k]; # makes .SMatrix, not type-stable
min 1.288 μs, mean 1.494 μs (10 allocations, 432 bytes)
julia> @btime @cast res[k]{i:3, j:3} := $A[i,j,k]; # makes .SMatrix of indicated size
min 24.054 ns, mean 40.098 ns (2 allocations, 80 bytes)
from tensorcast.jl.
Well here is my use case:
struct AffineBasis{N ,T <: AbstractFloat}
linear::SMatrix{N,N,T}
origin::SVector{N,T}
end
function world_to_camera(basis::AffineBasis; K=SMatrix{3,3}(1.0I))
R = basis.linear
c = basis.origin
P = K*[R' -R'*c]
return P
end
R = rand(3,3,100)
X₁ = rand(3,100)
@cast res[k]{i:3, j:3} := R[i,j,k]
@cast Xs[j]{i:3} := X₁[i,j]
bases = StructArray{Affine.AffineBasis}((res,Xs))
Ps = map(world_to_camera,bases)
which confusingly gives
StructVector{SMatrix{3, 4, Float64, 12}, NTuple{12, Vector{Float64}}, Int64} (alias for StructArray{SArray{Tuple{3, 4}, Float64, 2, 12}, 1, NTuple{12, Array{Float64, 1}}, Int64})
so maybe I should just stay away from StructArrrays because I don't understand how its storing contiguous matrices.
from tensorcast.jl.
Thanks or the responses. I've edited the code snippet to give more context.
from tensorcast.jl.
Related Issues (20)
- Use vector of indexes HOT 3
- World Age Issues with TensorCast calls from pyJulia HOT 3
- Exploit `einops` for docs / tests / advertising
- Indices which run over a shorter range than `axes(A,d)` HOT 9
- Extra singleton dimension appears during casting HOT 2
- cannot @cast on views of other @cast results HOT 3
- @cast for remaining n-1 dimensions, e.g, add noise to a tensor of column vectors HOT 1
- @cast works for hcat but not for [ ] HOT 1
- @cast on functions with tuples as lvalues HOT 3
- Concatenation / forced indexing HOT 1
- @cast into an SMatrix HOT 3
- Interpolation & scope HOT 1
- Hope to close the both side indices check HOT 2
- Performance of nested reductions HOT 1
- Expr -> Symbol MethodError when combining mapslices and reshapes HOT 1
- Support for AxisKeys
- array arguments in @cast indexing HOT 1
- Error in summation within @reduce HOT 1
- Macro hygeine of `TensorCast` symbol HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from tensorcast.jl.