Re: [Isis-fish-users] Pb nombre de dimensions calibration
Merci Sigrid! Effectivement mon problème venait de la déclaration du nombre de dimensions de "matrixDebarquement" que je rempli avec les "matrixDebarquement" 1 à 4. Je pensais qu'il fallait conserver la dimension des groupes en indiquant qu'il n'y en avait qu'un seul, mais en fait il faut simplement ne pas prendre en compte cette dimension. Pour info, dans la partie du code en question j'obtiens donc maintenant: /////*** specify dimention of the matrix containning observations (observed landings for instance) /////*** numbers of group/columns : could be equal to your number of classes in ISIS but may also be different if your had only aggregated data //int nbGroup = 10; /////*** enter number of observation per year (if you have observation by quarter put 4) / lines of the observations file int nbTrim = nbYear * 12; /////*** enter the number of metiers int nbMet = 4; int[] dimMatrix2 = { nbTrim }; int[] dimMatrix = {nbTrim, nbMet}; matrixDebarquement = MatrixFactory.getInstance().create(dimMatrix); // Cet objet contiendra les 4 seuivants, donc il a une dimension suplémentaire. matrixDebarquement1 = MatrixFactory.getInstance().create(dimMatrix2); matrixDebarquement2 = MatrixFactory.getInstance().create(dimMatrix2); matrixDebarquement3 = MatrixFactory.getInstance().create(dimMatrix2); matrixDebarquement4 = MatrixFactory.getInstance().create(dimMatrix2); matrixDebarquement1.importCSV(new FileReader(debarquementsObserves1), new int[] {0 }); matrixDebarquement2.importCSV(new FileReader(debarquementsObserves2), new int[] {0 }); matrixDebarquement3.importCSV(new FileReader(debarquementsObserves3), new int[] {0 }); matrixDebarquement4.importCSV(new FileReader(debarquementsObserves4), new int[] {0 }); //db.closeContext(); // Remplissage de la matrice matrixDebarquement avec les 4 matrices de débarquement (une par métier). for( MatrixIterator i=matrixDebarquement.iterator(); i.hasNext();){ i.next(); int [] debarquementsObserves = i.getCoordinates(); if (debarquementsObserves[1] == 0){ i.setValue(matrixDebarquement1.getValue(debarquementsObserves[0])); }else if (debarquementsObserves[1] == 1){ i.setValue(matrixDebarquement2.getValue(debarquementsObserves[0])); }else if (debarquementsObserves[1] == 2){ i.setValue(matrixDebarquement3.getValue(debarquementsObserves[0])); }else if (debarquementsObserves[1] == 3){ i.setValue(matrixDebarquement4.getValue(debarquementsObserves[0])); } } Encore merci. Bastien -----Message d'origine----- De : isis-fish-users-bounces@list.isis-fish.org [mailto:isis-fish-users-bounces@list.isis-fish.org] De la part de Sigrid.Lehuta@ifremer.fr Envoyé : mercredi 1 juin 2011 02:31 À : isis-fish-users@list.isis-fish.org Objet : Re: [Isis-fish-users] Pb nombre de dimensions calibration Hello Bastien, Miam bec de canne... voila des codes java qui donnent faim ! tes sommes sont correctes, c est le nombre de dimensions qui ne va pas, 2 pour L et 3 pour obs. si tu fais : obs = obs.reduce() (ca supprime les dimension d une matrice qui n ont qu'un element) ca va marcher... mais je comprends pas pourquoi tu crees ta matrix d observations matrixDebarquement à trois dimensions si tu as juste strategies et metiers... a mon avis y'a un soucis la dedans. tu charges 4 matrices matrixDebarquement1, 2 à 4 a 2 dimensions [nb trim, group], et tu en crees une avec 3 dimensions matrixDebarquement. Veux tu la remplir avec les 4 matrices ? est-ce ce que ces lignes sont sensées faire ?? : for( MatrixIterator i=matrixDebarquement.iterator(); i.hasNext();){ i.next(); int [] debarquementsObserves = i.getCoordinates(); if (debarquementsObserves[1] == 0){ i.setValue(matrixDebarquement1.getValue(debarquementsObserves[0],debarquemen tsObserves[2])); }else if (debarquementsObserves[1] == 1){ i.setValue(matrixDebarquement2.getValue(debarquementsObserves[0],debarquemen tsObserves[2])); }else if (debarquementsObserves[1] == 2){ i.setValue(matrixDebarquement3.getValue(debarquementsObserves[0],debarquemen tsObserves[2])); }else if (debarquementsObserves[1] == 3){ i.setValue(matrixDebarquement4.getValue(debarquementsObserves[0],debarquemen tsObserves[2])); } Si tu veux m'expliquer on peut corriger ca ensemble. Sinon reduce() va marcher. A+ Bastien Preuss <Bastien.Preuss@ird.fr> a écrit :
Bonjour,
Jai une erreur lors de ma calibration (je mets le Debug en pj) : il semble que la matrice des obs nest pas la même dimension que la matrice L des valeurs simulées, mais je ne comprend pas pourquoi car je fais bien la somme sur les dimensions nécessaires.
Ça semble coincer au niveau du nombre de groupes dont je nai pas le détail dans mes observations de débarquement. La matrice obs garde cette dimension mais affiche 1, alors que la matrice L (pour laquelle jai sommé sur les groupes) naffiche pas cette dimension.
dim de obs [12, 4, 1]
dim de L [12, 4]
12 correspond aux mois (que je nai pas sommés), 4 aux métiers sélectionnés (que je nai pas sommés), et 1 au nombre de classes, qui vaut 1 car les observations sont données toutes tailles confondues.
Je mets mon script de calibration en pièce jointe.
Est-ce que quelquun saurait doù vient le problème?
Merci.
Bastien
Bastien Preuss
Doctorant (PhD Student)
IFREMER - IRD - Université de Nouvelle-Calédonie
101 Promenade Roger Laroque
BP A5
98848 Noumea cedex
New-Caledonia
Tel: (+687) 260 723
P afin de contribuer au respect de l'environnement, merci de n'imprimer ce mail qu'en cas de nécessité
_______________________________________________ Isis-fish-users mailing list Isis-fish-users@list.isis-fish.org http://list.isis-fish.org/cgi-bin/mailman/listinfo/isis-fish-users
Salut Bastien, c'est cool si ca marche. Pour info tu peux faire bien plus simple. tu crees un unique csv avec une ligne par date et une colonne par metier. et apres : int[] dimMatrix = {nbTrim, nbMet}; matrixDebarquement = MatrixFactory.getInstance().create(dimMatrix); matrixDebarquement.importCSV(new FileReader(debarquementsObserves), new int[] {0,0}); tes metiers seront dans l ordre de tes colonnes. A+
Encore merci.
Bastien
-----Message d'origine----- De : isis-fish-users-bounces@list.isis-fish.org [mailto:isis-fish-users-bounces@list.isis-fish.org] De la part de Sigrid.Lehuta@ifremer.fr Envoyé : mercredi 1 juin 2011 02:31 À : isis-fish-users@list.isis-fish.org Objet : Re: [Isis-fish-users] Pb nombre de dimensions calibration
Hello Bastien, Miam bec de canne... voila des codes java qui donnent faim !
tes sommes sont correctes, c est le nombre de dimensions qui ne va pas, 2 pour L et 3 pour obs.
si tu fais : obs = obs.reduce() (ca supprime les dimension d une matrice qui n ont qu'un element) ca va marcher... mais je comprends pas pourquoi tu crees ta matrix d observations matrixDebarquement à trois dimensions si tu as juste strategies et metiers... a mon avis y'a un soucis la dedans.
tu charges 4 matrices matrixDebarquement1, 2 à 4 a 2 dimensions [nb trim, group], et tu en crees une avec 3 dimensions matrixDebarquement. Veux tu la remplir avec les 4 matrices ? est-ce ce que ces lignes sont sensées faire ?? :
for( MatrixIterator i=matrixDebarquement.iterator(); i.hasNext();){ i.next(); int [] debarquementsObserves = i.getCoordinates(); if (debarquementsObserves[1] == 0){ i.setValue(matrixDebarquement1.getValue(debarquementsObserves[0],debarquemen tsObserves[2])); }else if (debarquementsObserves[1] == 1){ i.setValue(matrixDebarquement2.getValue(debarquementsObserves[0],debarquemen tsObserves[2])); }else if (debarquementsObserves[1] == 2){ i.setValue(matrixDebarquement3.getValue(debarquementsObserves[0],debarquemen tsObserves[2])); }else if (debarquementsObserves[1] == 3){ i.setValue(matrixDebarquement4.getValue(debarquementsObserves[0],debarquemen tsObserves[2])); }
Si tu veux m'expliquer on peut corriger ca ensemble. Sinon reduce() va marcher.
A+
Bastien Preuss <Bastien.Preuss@ird.fr> a écrit :
Bonjour,
Jai une erreur lors de ma calibration (je mets le Debug en pj) : il semble que la matrice des obs nest pas la même dimension que la matrice L des valeurs simulées, mais je ne comprend pas pourquoi car je fais bien la somme sur les dimensions nécessaires.
Ça semble coincer au niveau du nombre de groupes dont je nai pas le détail dans mes observations de débarquement. La matrice obs garde cette dimension mais affiche 1, alors que la matrice L (pour laquelle jai sommé sur les groupes) naffiche pas cette dimension.
dim de obs [12, 4, 1]
dim de L [12, 4]
12 correspond aux mois (que je nai pas sommés), 4 aux métiers sélectionnés (que je nai pas sommés), et 1 au nombre de classes, qui vaut 1 car les observations sont données toutes tailles confondues.
Je mets mon script de calibration en pièce jointe.
Est-ce que quelquun saurait doù vient le problème?
Merci.
Bastien
Bastien Preuss
Doctorant (PhD Student)
IFREMER - IRD - Université de Nouvelle-Calédonie
101 Promenade Roger Laroque
BP A5
98848 Noumea cedex
New-Caledonia
Tel: (+687) 260 723
P afin de contribuer au respect de l'environnement, merci de n'imprimer ce mail qu'en cas de nécessité
_______________________________________________ Isis-fish-users mailing list Isis-fish-users@list.isis-fish.org http://list.isis-fish.org/cgi-bin/mailman/listinfo/isis-fish-users
_______________________________________________ Isis-fish-users mailing list Isis-fish-users@list.isis-fish.org http://list.isis-fish.org/cgi-bin/mailman/listinfo/isis-fish-users
participants (2)
-
Bastien Preuss -
Sigrid.Lehuta@ifremer.fr