J'essaie de créer un tableau de deux tableaux. Cependant, a = [[1, 2], [3, 4]]
Ne fait pas cela, il concatène en fait les tableaux. C'est vrai dans Julia: [[1, 2], [3, 4]] == [1, 2, 3, 4]
. Une idée?
Comme solution de contournement temporaire, j'utilise Push!(Push!(Array{Int, 1}[], a), b)
.
Si vous voulez un tableau de tableaux par opposition à une matrice (c'est-à-dire _ à deux dimensions Array
):
a = Array[ [1,2], [3,4] ]
Vous pouvez paramétrer (spécifier le type des éléments) un littéral Array
en plaçant le type devant le []
. Nous paramétrons donc ici le littéral Array
avec le type Array
. 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 de type Array{Array{T,N},1}
(ou Array{Array{Int64,N},1}
, si vous mettez le type devant []
). Si vous voulez plutôt quelque chose de plus fortement typé, par exemple un vecteur de vecteurs d'Int (c'est-à-dire Array{Array{Int64,1},1}
), utilisez le suivant:
a = Vector{Int}[ [1,2], [3,4] ]
Dans Julia v0.5, la syntaxe d'origine produit désormais le résultat souhaité:
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érez les exemples suivants d'initialisation de différents 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érez 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}
. Étant donné que la seule spécification pour les éléments de C
est qu'ils doivent être des tableaux avec des éléments de type 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, puisque Rand(3)
ne produit pas de tableau à 2 dimensions, nous ne pouvons pas l'utiliser pour affecter une valeur à un élément spécifique de D
Spécifiez les dimensions spécifiques des tableaux dans un tablea
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 ces é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, chacun étant 5,5. Nous pouvons le voir dans la syntaxe de la fonction Array()
utilisée pour construire un tableau:
Tableau {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. La syntaxe Array (T, dims) est également disponible, mais déconseillée.
Le type d'un tableau dans Julia comprend le nombre de 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 une compréhension de tableau:
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 tuple:
Julia> a = ([1,2],[3,4,5])
([1,2],[3,4,5])
Vous pouvez également faire {[1,2], [3,4]}
qui crée un Array{Any,1}
contenant [1,2]
et [3,4]
au lieu d'un Array{Array{T,N},1}
.
Pour ceux qui se demandent, dans la version 0.7, c'est assez similaire:
Array{Array{Float64,1},2}(undef, 10,10) #creates a two-dimensional array, ten rows and ten columns where each element is an array of type Float64
Array{Array{Float64, 2},1}(undef,10) #creates a one-dimensional array of length ten, where each element is a two-dimensional array of type Float64