Hello, je me permets d'exposer mon problème.
J'ai un vecteur de date noté : date;
Une matrice notée M avec en colonne 1 des dates et en 2ème des valeurs.
Je souhaite créer une matrice C avec en première colonne le vecteur date (complet), et en 2ème colonne la valeur de la 2ème colonne correspond à la date.
J'utilise le script vlookup trouvé sur google :
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 function [content, index] = vlookup(m, e, column, lookcolumn) %VLOOKUP the function as vlookup in Excel % % [content, index] = vlookup(m, e, column, lookcolumn) look for 'e' in % the 'lookcolumn'-th column of 'm', and return the coresponding % 'column'-th element of 'm' in the same row. % % the 'm' could be a numeric matrix of a cell matrix. % % lookcolumn is 1 by default if omitted. % % Example: % % m = {1, 'a', [2 3]; % 2, 'b', 'cd' % 3, 'a', true;}; % [content, index] = vlookup(m, 'a', 3, 2) then % content = {[2 3], 1}; % index = [1;3] % Copyright: zhang@zhiqiang.org, 2010 % author: http://zhiqiang.org/blog/tag/matlab if isempty(m) || isempty(e), return; end if nargin <= 3, lookcolumn = 1; end isechar = ischar(e); assert(isechar || isnumeric(e), 'the second parameter must be a string or numeric'); if iscell(m) content = {}; index = []; if isechar index = find(strcmp(e, m(:, lookcolumn))); content = m(index, column); else for i = 1:size(m, 1) if isnumeric(m{i, lookcolumn}) && m{i, lookcolumn} == e content = [content; m(i, column)]; %#ok<*AGROW> index = [index; i]; end end end else assert(~isechar, 'When the first para is a matrix, the second para must be numeric'); index = find(m(:, lookcolumn) == e); content = m(index, column); end
En suivant le commentaire du script j'écris :
Donc mon problème vient des dimensions dans la dernière ligne, comme dans C, la première colonne de C contient toutes les dates, je pensais que lorsque k correspond à une date non trouvé dans M, C(k,2) sera remplacé par rien, et dans le cas où "e" est trouvé dans M, alors C(k,2) sera remplacé par le scalaire contenu dans l'output de vlookup "content".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 for k=1:numel(date) e=date(k,1); %Permet d'avoir la valeur à chercher dans la 1ère colonne de M [content, index] = vlookup(M, e, 2, 1); %Vlookup qui renvoi dans content, la valeur de la 2ème colonne de lorsque "e" est trouvé dans la première colonne. de M C=date; %Création d'une matrice pour avoir toutes les dates en 1ère colonne et 2ème colonne la valeur correspondant C(k,2)=content; %Ici le problème les dimensions ne passe pas end
Mais cela ne fonctionne pas, une idée ?
Merci
Partager