Comment initialiser les tableaux à deux dimensions en Fortran
En C, vous pouvez facilement initialiser un tableau en utilisant les accolades de la syntaxe, si je me souviens bien:
int* a = new int[] { 1, 2, 3, 4 };
Comment pouvez-vous faire de même en Fortran pour les tableaux à deux dimensions quand vous voulez initialiser une matrice spécifique avec des valeurs de test de mathématiques fins? (Sans avoir à doublement de l'indice de chaque élément sur des relevés distincts)
Le tableau est défini par
real, dimension(3, 3) :: a
ou
real, dimension(:), allocatable :: a
Vous devez vous connecter pour publier un commentaire.
Vous pouvez le faire en utilisant remodeler et forme intrinsèques. Quelque chose comme:
Mais n'oubliez pas la colonne ordre majeur. Le tableau sera
après remodelage.
De sorte à obtenir:
vous avez également besoin d' transposer intrinsèque:
Pour plus d'exemple général (affectables tableau 2D avec des dimensions différentes), on a besoin taille intrinsèque:
Pour multidimensionnelle (rang>1) des tableaux, le Fortran façon pour l'initialisation diffère de la C de la solution parce que dans C les tableaux multidimensionnels sont juste des tableaux de tableaux de, etc.
En Fortran, à chaque rang correspond à un attribut différent de la modification du type de données. Mais il y a un seul constructeur array, pour le rang-1 tableaux. À partir de ces deux raisons, l'initialisation par le biais de la matrice de constructeur requiert la
RESHAPE
propre fonction.En plus de ce qui a déjà été répondu, il y a une façon plus directe de la saisie de la valeur d'une matrice par ligne plutôt que par colonne: remodeler a un argument optionnel
ORDER
qui peut être utilisé pour modifier l'ordre de remplissage de l'élément du tableau multidimensionnel avec les entrées de la matrice de constructeur.Par exemple, dans le cas de l'exemple dans la première réponse, on pourrait écrire:
obtenir le remplissage de la matrice exactement dans l'ordre indiqué par les lignes de code.
Le tableau
(/2, 1/)
les forces de l'index de colonne(2)
avoir préséance sur l'index de ligne(1)
, donnant l'effet désiré.Initialisation de tableau peut être fait dans le tableau de déclaration elle-même, comme indiqué ci-dessous:
Ça m'étonne que
est pas accepté par le compilateur (essayé g95, gfortran). Il s'avère que le
shape
de(/(/1,2,3/),(/4,5,6/),(/7,8,9/)/)
est9
et pas3 3
!