Initialiser un tableau de tableaux dans Julia
j'essaie de créer un tableau de deux tableaux. Cependant, a = [[1, 2], [3, 4]]
ne fait pas cela, il concat les tableaux. Cela est vrai dans Julia: [[1, 2], [3, 4]] == [1, 2, 3, 4]
. Une idée?
comme solution temporaire, j'utilise push!(push!(Array{Int, 1}[], a), b)
.
6 réponses
si vous voulez un tableau de tableaux par opposition à une matrice (i.e. 2-dimensionnel Array
):
a = Array[ [1,2], [3,4] ]
Vous pouvez paramétrer (spécifier le type des éléments)Array
littéral en mettant le type devant le []
. Nous voici donc le paramétrage de l' Array
littérale avec le Array
type. Cela modifie l'interprétation des crochets à l'intérieur de la déclaration littérale.
la réponse de Sean Mackesey vous donnera quelque chose du type Array{Array{T,N},1}
(ou Array{Array{Int64,N},1}
si vous mettez le type en face de []
). Si vous voulez quelque chose de plus fortement typé, par exemple un vecteur de vecteurs Int (c'est à dire Array{Array{Int64,1},1}
), utilisez ce qui suit:
a = Vector{Int}[ [1,2], [3,4] ]
Julia v0.5, la syntaxe d'origine désormais produit le résultat désiré:
julia> a = [[1, 2], [3, 4]]
2-element Array{Array{Int64,1},1}:
[1,2]
[3,4]
julia> VERSION
v"0.5.0"
Pour une réponse générale sur la construction de Tableaux de type Array
:
dans Julia, vous pouvez avoir un tableau qui contient d'autres objets de type tableau. Considérons les exemples suivants d'initialisation de divers types de tableaux:
A = Array{Float64}(10,10) # A single Array, dimensions 10 by 10, of Float64 type objects
B = Array{Array}(10,10,10) # A 10 by 10 by 10 Array. Each element is an Array of unspecified type and dimension.
C = Array{Array{Float64}}(10) ## A length 10, one-dimensional Array. Each element is an Array of Float64 type objects but unspecified dimensions
D = Array{Array{Float64, 2}}(10) ## A length 10, one-dimensional Array. Each element of is an 2 dimensional array of Float 64 objects
considérons par exemple les différences entre C et d ici:
julia> C[1] = rand(3)
3-element Array{Float64,1}:
0.604771
0.985604
0.166444
julia> D[1] = rand(3)
ERROR: MethodError:
rand(3)
produit un objet de type Array{Float64,1}
. Depuis la seule spécification pour les éléments de C
sont des tableaux avec des éléments tapez Float64, cela correspond à la définition de C
. Mais, pour D
nous avons spécifié que les éléments doivent être des tableaux bidimensionnels. Ainsi, depuis rand(3)
ne produit pas de tableau bidimensionnel, nous ne pouvons pas l'utiliser pour attribuer une valeur à un élément spécifique de D
spécifiez les Dimensions spécifiques des tableaux à l'intérieur d'un tableau
bien que nous puissions spécifier qu'un tableau contiendra des éléments qui sont de type tableau, et nous pouvons spécifier que, par exemple ceux les éléments doivent être des tableaux bidimensionnels, nous ne pouvons pas spécifier directement les dimensions de ces éléments. Par exemple: nous ne pouvons pas spécifier directement que nous voulons un tableau contenant 10 tableaux, dont chacun est 5,5. Nous pouvons le voir à partir de la syntaxe de Array()
fonction utilisée pour construire un Tableau:
Array{T} (dims)
construit un tableau dense non initialisé avec le type d'élément T. dims peut être un tuple ou une série d'arguments entiers. Le le tableau de syntaxe (t, dims) est aussi disponible, mais déprécié.
le type d'une rangée dans Julia englobe le nombre des dimensions mais pas la taille de ces dimensions. Ainsi, il n'y a pas de place dans cette syntaxe pour spécifier les dimensions précises. Néanmoins, un effet similaire pourrait être obtenu en utilisant un tableau de compréhension:
E = [Array{Float64}(5,5) for idx in 1:10]
Vous voulez probablement une matrice:
julia> a = [1 2; 3 4]
2x2 Int64 Array:
1 2
3 4
Peut-être un n-uplet:
julia> a = ([1,2],[3,4,5])
([1,2],[3,4,5])
vous pouvez aussi faire {[1,2], [3,4]}
ce qui crée un Array{Any,1}
contenant [1,2]
et [3,4]
au lieu d'un Array{Array{T,N},1}
.