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

C Discussion :

calculer la matrice de similarité d'un fichier csv


Sujet :

C

  1. #1
    Membre actif
    Femme Profil pro
    Enseignant
    Inscrit en
    Août 2012
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2012
    Messages : 71
    Par défaut calculer la matrice de similarité d'un fichier csv
    Bonsoir;
    j'ai une base de données (un fichier) en csv qui contient des entier, ce fichier est considéré comme une matrice avec 151 lignes et 5 colonnes, les valeurs de chaque case sont de type entier, je veux transformer cette matrice en une matrice de similarité en calculant la distance de hamming
    j'ai arriver à lire le fichier csv mais le problème c'est que je ne sais pas comment transformer ce fichier en une matrice pour pouvoir calculer la distance entre chaque deux vecteurs lignes successive.

  2. #2
    Membre actif
    Femme Profil pro
    Enseignant
    Inscrit en
    Août 2012
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2012
    Messages : 71
    Par défaut
    bonjour;
    le probleme c'est que je veux Extraire les données du fichier et les mettre sous la forme d'une matrice pour pouvoir calculer la matrice de similarité euclidienne ou hamming entre les vecteurs de la matrice

  3. #3
    Membre actif
    Femme Profil pro
    Enseignant
    Inscrit en
    Août 2012
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2012
    Messages : 71
    Par défaut
    bonjour;

    j'ai creer ce code mais ça n'a pas marché

    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
    #include <stdio.h>
     
    void main()
    {
    int i,j;
    double tab[150][5]; 
    FILE *fichier;
     
    fichier = fopen("iris.txt","r");
    if (fichier != NULL)
    {
    for(i=0;i<150;i++)
    for(j=0;j<5;j++)
     
    fscanf(fichier,"%lf\n",tab+i);
    fclose(fichier);
    }
    for(i=0;i<150;i++)
    for(j=0;j<5;j++) 
    printf("%lf\n", tab[i][j]);
    }

  4. #4
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 755
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 755
    Par défaut
    Ton problème est trivial

    Il faut créer une matrice/ tableau 2D (int mat[151][5])

    Et ensuite lire ton fichier caractère par caractère avec la fonction fgetc (<- lien cplusplus en anglais). À chaque caractère, il faut savoir si c'est:
    • le caractère délimiteur : on met dans notre matrice le nombre lu (<- on maintient un compteur de ligne et de colonne courante), on réinitialise ce nombre lu à 1, et on teste si après c'est un chiffre (*)
    • une fin de ligne : on met dans notre matrice le nombre lu, on réinitialise ce nombre à 1, et on passe à la ligne suivante (<- avec un test si la ligne a été remplie complètement pour savoir si il y a erreur - le fichier CSV n'est pas bien formé)
    • un caractère : si c'est un chiffre (if ((c >= '0') && (c <= '9')) alors on utilise la formule pour ajouter le chiffre qu'on pris au nombre en cours de lecture - current_nb = (current_nb * 10 + (c - '0')).
    • un caractère : sinon ce n'est pas un chiffre alors il y a erreur - le fichier CSV n'est pas bien formé


    * : Tu es en train de coder ce qu'on appelle une machine à états ("state machine" en anglais) ou 1 automate ... mais elle est très simple (3 ou 4 états + 1 état erreur)
    Et cela va dépendre de la flexibilité que tu veux : avoir 1 ou plusieurs espaces après le caractère délimiteur, permettre 1 ou plusieurs espaces au début de chaque ligne, ...
    Sans parler que tu ne dis pas si ce sont des nombres signés ou pas : donc un test du signe à rajouter au bon endroit si c'est le cas.


    Édit : Tu peux aussi lire ton fichier ligne par ligne avec la fonction fgets (<- lien cplusplus en anglais) et ensuite découper la ligne avec la fonction strtok
    C'est la solution la + rapide à coder (mais la - flexible à modifier) et il faut être sûr que tu auras toujours un fichier bien formé.

  5. #5
    Membre Expert Avatar de edgarjacobs
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    765
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 765
    Par défaut
    Hello,

    Avec ce fichier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    1;2;3;4;5
    2.1;2.2;2.3;2.4;2.5
    3.1;3.2;3.3;3.4;3.5
    4.1;4.2;4.3;.44;4.5
    5.;5.2;5.3;5.4;5.5
    6.1;6.2;6.3;6.4;6.5
    7;7.21;7.22;7.23;7.24
    8;8.1;8.2;8.3;8.4;
    9.1;9.2;9.3;9.4;9.5
    10.1;10.2;10.3;10.4;10.5
    ce code fonctionne:
    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
    #include <stdio.h>
     
    int main(void) {
    	FILE *st=fopen("v.csv","r");
    	double f[10][5];
     
    	for(int i=0;i<10;i++)
    		for(int j=0;j<5;j++)
    			fscanf(st,"%lf;",&f[i][j]);
     
    	fclose(st);
     
    	for(int i=0;i<10;i++, puts(""))
    		for(int j=0;j<5;j++)
    			printf("%g ",f[i][j]);
     
     
     
    	return(0);
    }

Discussions similaires

  1. Lancement de calculs après ouverture par macro d'un fichier CSV
    Par MonSavon dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 31/08/2017, 14h46
  2. Réponses: 2
    Dernier message: 29/06/2016, 00h45
  3. [Débutant] Calculer le pourcentage d'un traitement de fichier csv
    Par slim025 dans le forum C#
    Réponses: 3
    Dernier message: 20/05/2015, 18h33
  4. calcule de temps a partir d'un fichier CSV
    Par AI_LINUX dans le forum Calcul scientifique
    Réponses: 2
    Dernier message: 10/05/2015, 18h28
  5. calcul de matrice
    Par harsh dans le forum OpenGL
    Réponses: 1
    Dernier message: 08/03/2005, 11h07

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