# Assignment to Matrix

It seems that assignment to a matrix (as opposed to a tuple) is not supported, right ?

``````function foo()
return [[[1,2,3],"abc",'e'] [1, 2, 3]]
end

[a b; c d; e f] = foo() #error
``````

Is there any simple workaround (other than the obvious one to stick with tuples) ?

Uhmâ€¦ I think you either want a new matrix or to replace the elements of a previously allocated matrix:

``````julia> function foo()
return [[[1,2,3],"abc",'e'] [1, 2, 3]]
end
foo (generic function with 1 method)

julia> a = foo()
3Ă—2 Array{Any,2}:
[1, 2, 3]  1
"abc"      2
'e'        3

julia> a = Matrix{Any}(undef,3,2)
3Ă—2 Array{Any,2}:
#undef  #undef
#undef  #undef
#undef  #undef

julia> a .= foo()
3Ă—2 Array{Any,2}:
[1, 2, 3]  1
"abc"      2
'e'        3

``````

Or do you want six variables with names `a`, â€¦ `f` associated to the elements of the matrix that comes out from `foo()`?

1 Like

Yeah itâ€™s entirely non-obvious what the goal is. But if you mean some kind of â€śarray destructuringâ€ť similar to how tuple destructuring works, then this should totally be possible but I havenâ€™t seen an implementation of it yet. What already works is:

``````julia> (a,b,c,d) = [1 2 ; 3 4]
2Ă—2 Array{Int64,2}:
1  2
3  4

julia> a
1

julia> b
3

julia> c
2

julia> d
4
``````

So all itâ€™d take is some metaprogramming magic for a macro to flatten the left-hand side to a tuple in the same way that the right-hand side is flattened. (and maybe some shape checking)
Too bad Iâ€™m bad at this, but you could try it yourself: https://docs.julialang.org/en/v1/manual/metaprogramming/

I was meaning the second one (having the 6 variables associated to the elements of the matrix).

The idea was for a function like:

`[m1Part1 m1Part2 m1Part3; m2Part1 m2Part3 m2Part3] = partition([matrix1,matrix2],[0.7,0.2,0.1])`

where then I was interested only in the individual matrices (like xtrain, xvalidation, xtestâ€¦) rathen than in the whole matrix itself coming out from `partition`.

But I can stick with tuples, just having it in a matrix form would have been more elegantâ€¦