methods - Why does eye(size(X)) (where X is some array) throw an error? -
why can use
x = randn(size(y)); and
x = eye(size(y,1), size(y,2)); but not
x = eye(size(y)); ? throws following error, don't understand:
error:
eyehas no method matchingeye(::(int64,int64))
the error
error:
eyehas no method matchingeye(::(int64,int64))
should tip off on nature of problem. when in doubt, have @ function's methods , check whether types align of them.
eye methods
you can list methods provided eye calling methods on it:
julia> methods(eye) # 7 methods generic function "eye": eye{t}(::type{diagonal{t}},n::int64) @ linalg/diagonal.jl:92 eye(t::type{t<:top},m::integer,n::integer) @ array.jl:176 eye(m::integer,n::integer) @ array.jl:182 eye(t::type{t<:top},n::integer) @ array.jl:183 eye(n::integer) @ array.jl:184 eye(s::sparsematrixcsc{tv,ti<:integer}) @ sparse/sparsematrix.jl:413 eye{t}(x::abstractarray{t,2}) @ array.jl:185 do types align?
first, let's generate random data:
julia> y=rand(3,3) 3x3 array{float64,2}: 0.323068 0.759352 0.684859 0.357021 0.0706659 0.78324 0.128993 0.763624 0.458284 so, why eye(size(y,1), size(y,2)) work? because both size(y,1) , size(y,2) of type int64,
julia> typeof(size(y,1)) int64 julia> typeof(size(y,2)) int64 which subtype of integer,
julia> int64 <: integer true and eye provides method expects 2 arguments of type integer:
eye(m::integer,n::integer) and why does't eye(size(y)) work? because size returns pair,
julia> typeof(size(y)) (int64,int64) and eye provides no method takes pair argument.
relation currying
what need function f such that
f(eye)(size(y)) would equivalent to
eye(size(y,1), size(y,2)) you f uncurry eye. unfortunately you, julia devs have no plans introduce such function.
solution
anyway, you're overcomplicating things. there no need use size, here; applying eye array y produces desired result:
julia> eye(y) 3x3 array{float64,2}: 1.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 1.0
Comments
Post a Comment