private List<String> GetSimilaresDatabaseKmeans(List<Double> descriptoresEntrada) { ModeloSimilitudEntities db = new ModeloSimilitudEntities(); List<canciones> ListaCanciones = db.canciones.ToList(); Double[] vectorEntrada = descriptoresEntrada.ToArray(); vectorEntrada = Normalizar(vectorEntrada); Double[][] matriz = csvtoMatrix("descriptoresNormalizados"); int Nclusters = 7; KMeans kmeans = new KMeans(Nclusters, Accord.Math.Distance.Chebyshev); int[] indices = kmeans.Compute(matriz); int Cluster =kmeans.Nearest(vectorEntrada); int nroSimilares = 10; int[] indiceSimilar=new int[nroSimilares]; for(int j=0;j<nroSimilares;j++){ Double distancia = 1000; for (int i = 0; i < indices.Length; i++) { if (!indiceSimilar.Contains(i)) { if (Cluster == indices[i]) { Double distanciatemp = Accord.Math.Distance.Chebyshev(vectorEntrada, matriz[i]); if (distanciatemp < distancia) { distancia = distanciatemp; indiceSimilar[j] = i; } } } } } List<String> listaSimilares = new List<String>(); foreach (int i in indiceSimilar) { listaSimilares.Add(ListaCanciones[i].id_spotify.Substring(14)); } //string select="select * from canciones where energy={0} and liveness={1} and tempo={2} and speechiness={3} and acousticness={4} and loudness={5} and valence={6} and danceability={7} and instrumentalness={8} and key={9}"; //string select2 = "select * from canciones"; //for(int j=0;j<cercanos.Length;j++){ // object[] parameters = new object[10]; // for (int i = 0; i < 10; i++) // { // SqlParameter param = new SqlParameter("i", cercanos[j][i]); // parameters[i] = cercanos[j][i]; // } // var stores = db.Database.SqlQuery<canciones>(select, parameters).ToList(); // listaSimilares.Add(stores[0].id_spotify); //} return listaSimilares; }