Home > Codi > talla.m

talla

PURPOSE ^

Aquesta funció trevalla sobre objectes DATA, PCA i CBR. El que fa es

SYNOPSIS ^

function out = talla(obje,indexsvars,indextemps)

DESCRIPTION ^

Aquesta funció trevalla sobre objectes DATA, PCA i CBR. El que fa es
modificar les seves dades per un sub conjunt de les actuals. Es pot
indicar un nou rang de valors pel que fa a les observacións obe per a les
variables observades.

 Aplicat sobre CBR:
tallem el Model i la Base de casos per separat i reconstruim el
CBR no guardarem les configuracións de l'objecte actual pel que fa al
nombre de veins distancies i optimitzacións perqué en realitat és un CBR
nou sobre un model nou.

 Aplicat sobre PCA:
 Només es pot aplicar sobre models no sobre projeccións. El nou objecte
 PCA portarà les configuracions per defecte!

Parametres d'entrada:

   indexvars - Qualsevol tipus d'index valid en matlab (logicals, doubles,
               caracters,..) indica les variables de l'objecte actual que
               voldrem en la versió tallada.

               Exemple:
               Si teni un objecte amb 4 variables i bolem nomes la segona
               i la terçera els valors possibles de indexvars serien:

               [0 1 1 0] o be [2 3] o be [2 ; 3] ...



   indextemps - Qualsevol tipus d'index valid en matlab (logicals,
                doubles, caracters,..) indica els instants de temps de
                l'objecte actual que voldrem en la versió tallada.
                !!El format ha de ser el mateix que a indexvars!!

               Exemple:
               Si teni un objecte amb 481 instants de temps i bolem nomes 
               els instants de temps del 12 al 120 els possibles valors de
               indextemps que ens permetrien obtenir els resultats
               desitjats son:

               [12:120] o be [zeros(1,11) ones(1,120-11) zeros(1,481-120)]



Parametres de sortida:

   out - Un objecte del mateix tipus que obje al qual se li han modificat
         les variables i el temps segons lo indicat a indexsvars i
         indextemps. S'hauran modificat tot s els parametres interns en
         consequencia (Fases, contribucions, mitjes,...)

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SOURCE CODE ^

0001 function out = talla(obje,indexsvars,indextemps)
0002 %Aquesta funció trevalla sobre objectes DATA, PCA i CBR. El que fa es
0003 %modificar les seves dades per un sub conjunt de les actuals. Es pot
0004 %indicar un nou rang de valors pel que fa a les observacións obe per a les
0005 %variables observades.
0006 %
0007 % Aplicat sobre CBR:
0008 %tallem el Model i la Base de casos per separat i reconstruim el
0009 %CBR no guardarem les configuracións de l'objecte actual pel que fa al
0010 %nombre de veins distancies i optimitzacións perqué en realitat és un CBR
0011 %nou sobre un model nou.
0012 %
0013 % Aplicat sobre PCA:
0014 % Només es pot aplicar sobre models no sobre projeccións. El nou objecte
0015 % PCA portarà les configuracions per defecte!
0016 %
0017 %Parametres d'entrada:
0018 %
0019 %   indexvars - Qualsevol tipus d'index valid en matlab (logicals, doubles,
0020 %               caracters,..) indica les variables de l'objecte actual que
0021 %               voldrem en la versió tallada.
0022 %
0023 %               Exemple:
0024 %               Si teni un objecte amb 4 variables i bolem nomes la segona
0025 %               i la terçera els valors possibles de indexvars serien:
0026 %
0027 %               [0 1 1 0] o be [2 3] o be [2 ; 3] ...
0028 %
0029 %
0030 %
0031 %   indextemps - Qualsevol tipus d'index valid en matlab (logicals,
0032 %                doubles, caracters,..) indica els instants de temps de
0033 %                l'objecte actual que voldrem en la versió tallada.
0034 %                !!El format ha de ser el mateix que a indexvars!!
0035 %
0036 %               Exemple:
0037 %               Si teni un objecte amb 481 instants de temps i bolem nomes
0038 %               els instants de temps del 12 al 120 els possibles valors de
0039 %               indextemps que ens permetrien obtenir els resultats
0040 %               desitjats son:
0041 %
0042 %               [12:120] o be [zeros(1,11) ones(1,120-11) zeros(1,481-120)]
0043 %
0044 %
0045 %
0046 %Parametres de sortida:
0047 %
0048 %   out - Un objecte del mateix tipus que obje al qual se li han modificat
0049 %         les variables i el temps segons lo indicat a indexsvars i
0050 %         indextemps. S'hauran modificat tot s els parametres interns en
0051 %         consequencia (Fases, contribucions, mitjes,...)
0052 %
0053 
0054 %segons el tipus d'objecte que ens passin farem una cosa o una altre
0055 x=whos('obje');
0056 x=x.class;
0057 switch x
0058     case 'CBR'
0059         %tallem el model i la base de casos per separat i reconstruirem el
0060         %CBR
0061         M = talla(obje.getModel(),indexsvars,indextemps);
0062         C = talla(obje.getCaseBase.getDATA(),indexsvars,indextemps);
0063         
0064         out= CBR(M,C);
0065         
0066     case 'PCA'
0067         if(obje.isModel)
0068             %tallem un objecte PCA Model tallan l'objecte dades intern i
0069             %reconstruint l'objecte
0070             M = talla(obje.getDATA(),indexsvars,indextemps);
0071             out = PCA(M);
0072             
0073             %Posem la configuració com avans!
0074             out.setNormalizationMethod(obje.getNormalizationMethod);
0075             out.setPCSelectionMethod(obje.getPCSelectionMethod);
0076             out.setTrajectoryRemoval(obje.getTrajectoryRemoval);
0077             out.setContributionMethod(obje.getContMetode);
0078             out.setLimitMethod(obje.getLimitMethod);
0079             out.setUnfoldingMethod(obje.getUnfoldingMethod);
0080         else
0081             %no podem projectar-lo de nou!!
0082             error('Error/talla:Undefined for non model PCA!');
0083         end
0084         
0085     case 'DATA'
0086         %Recuperarem les dades en 3D i tallarem segons en indiica l'usuari
0087         M = obje.getRawData3D;
0088         out = obje.copy();
0089         
0090         if  (ischar(indextemps) && strcmp(indextemps,':'))
0091             out.setRawData(M(indextemps,indexsvars,:)); %el temps es :
0092         else
0093             if max(indextemps) > (size(M,1))
0094                 indextemps(end) = (size(M,1));
0095             end
0096             out.setRawData(M(indextemps,indexsvars,:)); %son numeros 0...tems sumem 1
0097         end
0098         out.setVariableLabel(out.getVariableLabel(indexsvars));
0099         
0100         %Fases
0101         %falta tallar les fases
0102         if isempty(obje.getStages) || isempty(obje.getStagesDurations) || ~(ischar(indextemps) && strcmp(indextemps,':'))
0103             
0104             if isnumeric(indextemps)
0105                 dura = obje.getStagesDurations;
0106                 fase = obje.getStages;
0107                 csum=cumsum(dura);
0108                 if ~isempty(csum)
0109                     i = (csum - min(indextemps)) >= 0;
0110                     dura = dura(i);
0111                     fase = fase(i);
0112                     
0113                     %calculem els desfases
0114                     z=1:length(i);
0115                     offset=min(z(i));%posició que ocupava el que ara es ep primer de dura
0116                     
0117                     aux = (csum +1 - min(indextemps));
0118                     dura(1) = aux(offset);%el valor que dura la fase 1 pot variar
0119                     
0120                     csum = cumsum(dura);
0121                     i = (csum - (max(indextemps) - min(indextemps)) -1) <= 0;
0122 
0123                     
0124                     %calculem els desfases
0125                     z=1:length(i);
0126                     offset=max(z(i));%posició que ocupava el que ara es l'ultim de dura
0127                     
0128                     
0129                     
0130                     
0131                     
0132                     if isempty(offset)
0133                         aux = max(indextemps);
0134                         offset =1;
0135                     else
0136                         aux=(csum - (max(indextemps) - min(indextemps) +1));
0137                     end
0138                     
0139                     if abs(aux(offset)) ~= 0 %hi ha una unltima fase pero no entera
0140                         %if length(dura)~=length(fase) %i queden de disponibles
0141                             dura = [dura(i) abs(aux(offset))];
0142                         %end
0143                     else
0144                         dura = dura(i);
0145                     end
0146                     
0147                     
0148                     fase = fase(1:length(dura));%tallem els noms en consequencia
0149                     
0150                     %i les posem al nou objecte!
0151                     out.setStages(fase);
0152                     out.setStagesDurations(dura);
0153                 end
0154             else
0155                 %si no es numeric son els : i ja esta be com esta perque els bolem totes
0156             end
0157         end
0158         %Si les fases estan buides es queden =
0159         
0160     otherwise
0161          error('Unsuported class!');
0162 end
0163 
0164 end

Generated on Wed 12-Sep-2012 13:03:54 by m2html © 2005