IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Conversion de List<double[]> vers double [][] ?


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de mobi_bil
    Profil pro
    Inscrit en
    Février 2009
    Messages
    242
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 242
    Par défaut Conversion de List<double[]> vers double [][] ?
    Bonjour à tous, je cherche à convertir une listes de vecteurs [] de type double vers une martice [][] de type double. Merci.

  2. #2
    Membre Expert

    Homme Profil pro
    SDE
    Inscrit en
    Août 2007
    Messages
    2 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : SDE

    Informations forums :
    Inscription : Août 2007
    Messages : 2 013
    Par défaut
    Bonjour,

    tu cherche à convertir des listes de Vector[] ou des listes de double[] ?

    Pour la liste de double[] ça devrait être ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            List<double[]> l = new ArrayList<double[]>();
            double[][] d = (double[][]) l.toArray();
    Pour la liste de Vector[] ça devrait être ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
            List<Vector[]> lv = new ArrayList<Vector[]>();
            Vector[][] tv = (Vector[][]) lv.toArray();

    (Code non testé)

  3. #3
    Membre confirmé Avatar de mobi_bil
    Profil pro
    Inscrit en
    Février 2009
    Messages
    242
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 242
    Par défaut
    Désolé, pour la première ça ne marche pas .
    Voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
     
    import java.util.ArrayList;
    import java.util.List;
     
    class mat_cov
    {
     
     
    	public mat_cov()
     
    	{
     
    	}
     
    	public double[][] matrix(List <double[]>ma)
     
    	{
    		return (double[][]) ma.toArray();
     
    	}
     
    	public double [][] inv(double [][] t)
    	{
    		double [][] dou=new double [t[0].length][t[0].length];
    		for (int i=0;i<t[0].length;i++)
    			for (int j=0;j<t[0].length;j++)
    				  dou[j][i]=t[i][j];
     
     		return dou;		
    	}
     
    	public double moy_vec(double [] t)
    	{
    		int moy=0;
    		for (int i=0;i<t.length;i++)
    			moy+=t[i];
     
     		return (moy/t.length);		
    	}
     
     
     
    	public double [][] covar (List <double[]>ma)
     
    	{
    		int so;
    		double [][] m=inv(matrix(ma));
    		double [][] res=new double[m.length][m.length]; 
     
    		for (int i=0;i<m.length;i++)
    			for (int j=0;j<m.length;j++)
    			{   so=0; 
    				for (int k=0;k<m[0].length;k++)
    		           so+=((m[i][k]-moy_vec(m[i]))*(m[j][k]-moy_vec(m[j])));	   
     
    				res[i][j]=(so/(m[0].length-1));
    			}
    	     return res;	   
     
    	}
     
     
     
    }
     
    public class app
    {
     
    	public static void main(String[]arg)
     
    	{
     
     
    		List<double[]>bil=new ArrayList<double []>();
    		bil.add(new double [] {4,2,0.6});
    		bil.add(new double [] {4.2,2.1,0.59});
    		bil.add(new double [] {3.9,2.0,0.58});
    		bil.add(new double [] {4.3,2.1,0.62});
    		bil.add(new double [] {4.1,2.2,0.63});
     
    		mat_cov ll=new mat_cov();
     
    		double [][]ss=ll.matrix(bil);
     
     
     
    	}
     
     
     
    }
    C'est au niveau de cette fonction :
    public double[][] matrix(List <double[]>ma)

    {
    return (double[][]) ma.toArray();

    }
    Type d'érreur :

    Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object;
    at mat_cov.matrix(app.java:17)
    at app.main(app.java:82)

  4. #4
    Membre Expert

    Homme Profil pro
    SDE
    Inscrit en
    Août 2007
    Messages
    2 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : SDE

    Informations forums :
    Inscription : Août 2007
    Messages : 2 013
    Par défaut
    Dance ce cas tente le code suivant (testé)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            List<double[]> l = new ArrayList<double[]>();
            double[][] d = new double[l.size()][];
            d = l.toArray(d);

  5. #5
    Membre confirmé Avatar de mobi_bil
    Profil pro
    Inscrit en
    Février 2009
    Messages
    242
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 242
    Par défaut
    Citation Envoyé par kazou Voir le message
    Dance ce cas tente le code suivant (testé)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            List<double[]> l = new ArrayList<double[]>();
            double[][] d = new double[l.size()][];
            d = l.toArray(d);
    Bonjour,Votre code marche trés bien. Merci.
    Une seule question : Est ce que les deux déclariations suivantes sont égales :

    double[][] d = new double[l.size()][];
    double[][] d = new double[l.size()][l.get(0).length];

  6. #6
    Membre Expert

    Homme Profil pro
    SDE
    Inscrit en
    Août 2007
    Messages
    2 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : SDE

    Informations forums :
    Inscription : Août 2007
    Messages : 2 013
    Par défaut
    Bonjour,

    Non elles ne sont pas égales, dans la deuxième instruction on va allouer l'espace de la deuxième dimention du tableau (dont la référence sera par la suite changé par celle du tableau interne de la liste), il n'est donc pas utile d'allouer cet espace en mémoire (qui sera inutilisé et libérré par le garbage collector a l'effectation de la liste).
    De plus l'allocation ne correspond pas dans tous les cas au contenu de ta liste, puisque tu va allouer ta deuxième dimention avec la talle du premier tableau de ta liste, et les tailles des secondes dimentions peuvent varier (peut être pas dans ton cas, mais c'est techniquement possible).

    Pour résumé il est préférable d'allouer que la première dimention dans notre cas

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 27/01/2009, 10h30
  2. Conversion double binaire vers décimal
    Par mess-mate dans le forum C++
    Réponses: 17
    Dernier message: 07/12/2008, 00h44
  3. Conversion hexa vers double
    Par EnigmuS dans le forum C
    Réponses: 13
    Dernier message: 16/05/2007, 14h06
  4. Problème conversion float vers double
    Par jhenaff dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 27/01/2006, 10h39
  5. Conversion d'un tableau de float en double ?
    Par alex6891 dans le forum C++
    Réponses: 5
    Dernier message: 05/01/2006, 06h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo