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,...)
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