Supposons que j'ai cette Matrice:
julia> mat = [
1 2 3 4
5 6 7 8
9 8 7 6
];
Ensuite, je veux mettre des tranches de cette Matrice dans un Array
3D avec des types de SMatrix{Int64}
, comme ci-dessous:
julia> using StaticArrays
julia> arr = Array{SMatrix{Int64}, 3}(undef, 3, 2, 3);
julia> col_idx = [1, 2, 3];
julia> foreach(x->arr[:, :, x] = mat[:, x:x+1], col_idx)
ERROR: MethodError: Cannot `convert` an object of type
Int64 to an object of type
SMatrix{Int64}
Closest candidates are:
convert(::Type{T}, ::LinearAlgebra.Factorization) where T<:AbstractArray at C:\Users\JUL\.julia\juliaup\julia-1.8.3+0.x64\share\julia\stdlib\v1.8\LinearAlgebra\src\factorization.jl:58
convert(::Type{SA}, ::Tuple) where SA<:StaticArray at C:\Users\JUL\.julia\packages\StaticArrays\x7lS0\src\convert.jl:179
convert(::Type{SA}, ::SA) where SA<:StaticArray at C:\Users\JUL\.julia\packages\StaticArrays\x7lS0\src\convert.jl:178
...
Stacktrace:
[1] setindex!
@ .\array.jl:968 [inlined]
[2] macro expansion
@ .\multidimensional.jl:946 [inlined]
[3] macro expansion
@ .\cartesian.jl:64 [inlined]
[4] macro expansion
@ .\multidimensional.jl:941 [inlined]
[5] _unsafe_setindex!(::IndexLinear, ::Array{SMatrix{Int64}, 3}, ::Matrix{Int64}, ::Base.Slice{Base.OneTo{Int64}}, ::Base.Slice{Base.OneTo{Int64}}, ::Int64)
@ Base .\multidimensional.jl:953
[6] _setindex!
@ .\multidimensional.jl:930 [inlined]
[7] setindex!(::Array{SMatrix{Int64}, 3}, ::Matrix{Int64}, ::Function, ::Function, ::Int64)
@ Base .\abstractarray.jl:1344
[8] (::var"#5#6")(x::Int64)
@ Main .\REPL[20]:1
[9] foreach(f::var"#5#6", itr::Vector{Int64})
@ Base .\abstractarray.jl:2774
[10] top-level scope
@ REPL[20]:1
Comment puis-je y arriver?
P.S.:
Il ne s'agit que d'un exemple minimal et reproductible. Dans le sens pratique, j'ai une taille de (10, 10, 2000)
pour arr
et une grande taille pour mat
également (10x2000
, je suppose)!