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

MATLAB Discussion :

Tri de données dans une matrice et sélection


Sujet :

MATLAB

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 16
    Points : 8
    Points
    8
    Par défaut Tri de données dans une matrice et sélection
    Bonjour à tous,

    dans le cadre d'une étude, je cherche à implementer un porte feuille d'actifs.

    Pour se faire, j'ai une population de données avec les mouvements de prix sur les 10 jours suivant un signal.

    Je cherche à ne retenir qu'au maximum les 5 premiers signaux de chaque jour, mais je n'ai aucune idée de comment mettre cette condition dans matlab.

    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
    3497	NaN	2013	1	14	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	13,4729180000000	13,9900000000000	41299	14,8000000000000	14,6126930000000	14,9600000000000	13,9950000000000	14,2079425500000	0,000676132521974413	13,7632689000000
    3497	NaN	2013	1	14	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	13,4729180000000	13,9900000000000	41302	14,7100000000000	14,6126930000000	14,9600000000000	13,9950000000000	14,2079425500000	-0,00608108108108107	13,8239420500000
    3497	NaN	2013	1	14	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	13,4729180000000	13,9900000000000	41303	14,6700000000000	14,6126930000000	14,9600000000000	13,9950000000000	14,2079425500000	-0,00271923861318837	13,8846152000000
    3506	NaN	2013	1	14	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	5,56232100000000	5,56630000000000	41289	5,56805000000000	5,47294600000000	5,62132000000000	5,50420000000000	5,53362610000000	-0,000314391965937941	5,62596600000000
    3506	NaN	2013	1	14	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	5,56232100000000	5,56630000000000	41290	5,56795000000000	5,47294600000000	5,62132000000000	5,50420000000000	5,53362610000000	1,79596088398371e-05	5,62596600000000
    3506	NaN	2013	1	14	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	5,56232100000000	5,56630000000000	41291	5,56988000000000	5,47294600000000	5,62132000000000	5,50420000000000	5,53362610000000	-0,000346626675886216	5,62596600000000
    3506	NaN	2013	1	14	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	5,56232100000000	5,56630000000000	41292	5,59824000000000	5,47294600000000	5,62132000000000	5,50420000000000	5,53362610000000	-0,00509167163385913	5,61066400000000
    3506	NaN	2013	1	14	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	5,56232100000000	5,56630000000000	41295	5,60130000000000	5,47294600000000	5,62132000000000	5,50420000000000	5,53362610000000	-0,000546600360113269	5,60301300000000
    3506	NaN	2013	1	14	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	5,56232100000000	5,56630000000000	41296	5,57911000000000	5,47294600000000	5,62132000000000	5,50420000000000	5,53362610000000	0,00396158034741938	5,59536200000000
    3506	NaN	2013	1	14	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	5,56232100000000	5,56630000000000	41297	5,56225000000000	5,47294600000000	5,62132000000000	5,50420000000000	5,53362610000000	0,00302198737791517	5,58771100000000
    3506	NaN	2013	1	14	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	5,56232100000000	5,56630000000000	41298	5,53500000000000	5,47294600000000	5,62132000000000	5,50420000000000	5,53362610000000	0,00489909658861064	5,58006000000000
    3506	NaN	2013	1	14	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	5,56232100000000	5,56630000000000	41299	5,51620000000000	5,47294600000000	5,62132000000000	5,50420000000000	5,53362610000000	0,00339656729900627	5,57240900000000
    3506	NaN	2013	1	14	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	5,56232100000000	5,56630000000000	41302	5,53730000000000	5,47294600000000	5,62132000000000	5,50420000000000	5,53362610000000	-0,00382509698705625	5,56475800000000
    3508	NaN	2013	1	15	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	200,862660000000	218	41291	219	230,615385000000	240	219	222,415384750000	0,00458715596330275	202,538460000000
    3508	NaN	2013	1	15	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	200,862660000000	218	41292	231	230,615385000000	240	219	222,415384750000	0,0547945205479452	202,538460000000
    3508	NaN	2013	1	15	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	200,862660000000	218	41295	230	230,615385000000	240	219	222,415384750000	-0,00432900432900433	202,538460000000
    3508	NaN	2013	1	15	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	200,862660000000	218	41296	229	230,615385000000	240	219	222,415384750000	-0,00434782608695652	205,346152500000
    3508	NaN	2013	1	15	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	200,862660000000	218	41297	223	230,615385000000	240	219	222,415384750000	-0,0262008733624454	206,749998750000
    3508	NaN	2013	1	15	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	200,862660000000	218	41298	228	230,615385000000	240	219	222,415384750000	0,0224215246636771	208,153845000000
    3508	NaN	2013	1	15	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	200,862660000000	218	41299	233	230,615385000000	240	219	222,415384750000	0,0219298245614035	209,557691250000
    3508	NaN	2013	1	15	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	200,862660000000	218	41302	231	230,615385000000	240	219	222,415384750000	-0,00858369098712446	210,961537500000
    3508	NaN	2013	1	15	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	200,862660000000	218	41303	236	230,615385000000	240	219	222,415384750000	0,0216450216450216	212,365383750000
    3508	NaN	2013	1	15	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	200,862660000000	218	41304	241	230,615385000000	240	219	222,415384750000	0,0211864406779661	213,769230000000
    3539	NaN	2013	1	15	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	690,888540000000	716	41289	710,800000000000	665,893034000000	740,300000000000	702,750000000000	698,462561900000	0,00726256983240230	749,404644000000
    Voici à quoi ressemble un échantillon de la population.

    Il faut noter que certains jours, seulement 1 à 2 signaux peuvent venir et donc il ne faut garder que ces 2 signaux.

    J'ai pensé à faire une boucle avec un for, mais je ne vois pas comment construire cela vu qu'un tri doit etre fait et que le nombre de signaux n'est pas stable.

    Merci de votre aide!

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Avec la fonction unique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    % data est ton tableau de données tel que tu l'as présenté
    [~, ia, ~] = unique(data(:,3:5), 'rows', 'first');
    ia contiendra les indices des premiers jours de chaque série.
    On peut alors obtenir les indices :
    ia(1)       ia(2)               ia(end)
    ia(1) + 1   ia(2) + 1           ia(end) + 1
    ia(1) + 2   ia(2) + 2    ...    ia(end) + 2
    ia(1) + 3   ia(2) + 3           ia(end) + 3
    ia(1) + 4   ia(2) + 4           ia(end) + 4
    comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    idx =  bsxfun(@plus, (0:4).', ia(:).');
    et récupérer les données correspondantes :

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 16
    Points : 8
    Points
    8
    Par défaut
    Merci pour ton aide,

    Mais le probleme persiste car il ne m'identifie qu'un seul cas, la première colonne correspondant au cas, il peut y avoir plusieurs cas sur le meme jour et je ne souhaite garder que 5 max.

    Ce que le code fait pour le moment est qu'il garde juste les 5 premières lignes max et non pas les 5 cas avec la variations sur 10 jours qui correspond aux 10 lignes de chaque cas.

    Ce que je souhaiterais obtenir, c'est le meme résultat que maintenant, avec 5 cas max, mais en conservant les 10 lignes de chaque, et qui retourne donc au maximum 50 lignes par date.

    Je ne sais pas si je suis totalement clair.

    En tout cas, merci de l'aide et si tu as une solution pour que la fonction unique marche en conservant les lignes comme dis

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par lFantasyz Voir le message
    Je ne sais pas si je suis totalement clair.
    À vrai dire pas vraiment
    Qu'appelles-tu « un cas » ? Est-ce que cela représente les chiffres de la première colonne ? Si oui il suffit d'appliquer unique dessus à la place des dates.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 16
    Points : 8
    Points
    8
    Par défaut
    Alors effectivement, le cas est la première colonne.

    Le soucis si je fais ça est que je perds l'interet premier qui est la classification par date et non par cas.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Alors je ne comprends vraiment pas ce que tu souhaites faire...

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 16
    Points : 8
    Points
    8
    Par défaut
    Rebonjour,

    Alors en fait, j'ai des données, classifiées par cas comme présenté plus haut. Chaque cas à une durée de vie de 10 jours.

    Je souhaite n'avoir qu'au maximum 5 cas par jour dans mon portefeuille. Certains jours, plus de 5 cas sont créés, d'autres jours moins de 5 cas.

    Je souhaite pouvoir garder les 10 jours de vie du cas dans la base de donnée qui sera créée suite à ce tri en fonction du jours.

    1 exemple simplifié de ce que j'ai et de ce que je souhaite avoir:

    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
    jour1.
    3234  2013 01 14 price closing1
    3234  2013 01 14 price closing2
    3234  2013 01 14 price closing3
    3234  2013 01 14 price closing4
    2314  2013 01 14 price closing1
    2314  2013 01 14 price closing2
    2314  2013 01 14 price closing3
    2314  2013 01 14 price closing4
    4352  2013 01 14 price closing1
    4352  2013 01 14 price closing2
    4352  2013 01 14 price closing3
    4352  2013 01 14 price closing4
    5434  2013 01 14 price closing1
    5434  2013 01 14 price closing2
    5434  2013 01 14 price closing3
    5434  2013 01 14 price closing4
    7453  2013 01 14 price closing1
    7453  2013 01 14 price closing2
    7453  2013 01 14 price closing3
    7453  2013 01 14 price closing4
    8434  2013 01 14 price closing1
    8434  2013 01 14 price closing2
    8434  2013 01 14 price closing3
    8434  2013 01 14 price closing4
     
    jour 2. 
    4564 2013 01 15 price closing1
    4564 2013 01 15 price closing2
    4564 2013 01 15 price closing3
    4564 2013 01 15 price closing4
    9087 2013 01 15 price closing1
    9087 2013 01 15 price closing2
    9087 2013 01 15 price closing3
    9087 2013 01 15 price closing4
    1234 2013 01 15 price closing1
    1234 2013 01 15 price closing2
    1234 2013 01 15 price closing3
    1234 2013 01 15 price closing4
    Si je me suis bien expliqué précédemment, vous en déduirez que dans le jour 1, on garde tous les cas et infos sauf celles de 8434 et que dans le jour 2, on garde tous les cas.

    En espérant que ce message vous éclaire sur mon problème.

    Merci

Discussions similaires

  1. Index d'une valeur donnée dans une matrice
    Par Gouasmi_moh dans le forum MATLAB
    Réponses: 1
    Dernier message: 21/03/2011, 13h38
  2. Réponses: 3
    Dernier message: 28/03/2010, 15h05
  3. Réponses: 4
    Dernier message: 20/05/2008, 09h41
  4. Réponses: 3
    Dernier message: 17/07/2007, 10h15
  5. Aide demandée pour sélection de données dans une liste
    Par pyprog dans le forum Général Python
    Réponses: 2
    Dernier message: 15/08/2006, 21h11

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