Bonjour à tous, je cherche à convertir une listes de vecteurs [] de type double vers une martice [][] de type double. Merci.
Version imprimable
Bonjour à tous, je cherche à convertir une listes de vecteurs [] de type double vers une martice [][] de type double. Merci.
Bonjour,
tu cherche à convertir des listes de Vector[] ou des listes de double[] ?
Pour la liste de double[] ça devrait être ça :
Pour la liste de Vector[] ça devrait être ça :Code:
1
2 List<double[]> l = new ArrayList<double[]>(); double[][] d = (double[][]) l.toArray();
Code:
1
2
3 List<Vector[]> lv = new ArrayList<Vector[]>(); Vector[][] tv = (Vector[][]) lv.toArray();
(Code non testé)
Désolé, pour la première ça ne marche pas .
Voici le code :
C'est au niveau de cette fonction :Code:
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); } }
Type d'érreur :Citation:
public double[][] matrix(List <double[]>ma)
{
return (double[][]) ma.toArray();
}
Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object;
at mat_cov.matrix(app.java:17)
at app.main(app.java:82)
Dance ce cas tente le code suivant (testé)
Code:
1
2
3 List<double[]> l = new ArrayList<double[]>(); double[][] d = new double[l.size()][]; d = l.toArray(d);
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 8-)
Merci beaucoup, problème résolu.