Abspeicherung in neuen Vektor < Matlab < Mathe-Software < Mathe < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 11:44 Do 05.04.2012 | Autor: | ronchen |
Ich habe diese Frage in keinem anderem Forum gestellt.
Hallo habe folgende Programmierung:
sek=2;
anfangsZeit = 1;
for m = 1 : (length(A) )
endZeit = find(B < (m * sek), 1, 'last');
D=A(anfangsZeit:endZeit);
anfangsZeit = endZeit + 1;
end
Diese schleife sucht mir aus einem großen Vektor A mit Hilfe eines Zeitvektors B alle Werte die innerhalb von 2 Sekunden vorkommen.Diese werden dann unter D gespeichert in dieser schleife. Nun möchte ich aber das nach jedem Durchlauf dieses D in einem Vektor abgespeichert wird also z.B. C1,C2,C3 usw. sonst wird er ja immer wieder überschrieben, ist dies möglich?
Danke für jede Hilfe
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 12:12 Do 05.04.2012 | Autor: | QCO |
Du kannst doch einfach eine Matrix nutzen - funktionieren wie die Vektoren, nur mit zwei Indizies.
Angenommen deine Ergebnisvektoren D werden nicht länger als 42
C=zeros(length(A),42)
und dann in der Schleife:
C(m,:)=D
Ansonsten gäbe es noch die Funktion eval:
eval(['C_' num2str(m) '=D']);
allerdings ist das eher langsam und auch nicht unbedingt der beste Stil.
|
|
|
|
|
Status: |
(Frage) überfällig | Datum: | 16:31 Do 05.04.2012 | Autor: | ronchen |
Vielen Dank für die schnelle Antwort. Das mit eval hatte ich auch schon probiert funktioniert so weit ganz ok, bekommene aber zu viel leere Vektoren. Problem bei mir habe zum Beispiel 43000 Werte pro 0,0015 sek ein Wert so das ca. pro 2 sekunden 3116 werte in einen vektor müssen.So diese Zahl variiert aber kann auch 3115 oder 3117 sein. wenn ich es so mache:
sek=2;
anfangsZeit = 1;
C=zeros(length(A),1316);
for m = 1 : (length(A) )
endZeit = find(B < (m * sek), 1, 'last');
D=A(anfangsZeit:endZeit);
C(m,:)=D;
anfangsZeit = endZeit + 1;
end
sagt er dann:
??? Subscripted assignment dimension mismatch.
Error in ==> Analyse_einer_Messreihe at 22
C(m,:)=anzahl;
Das heißt er beschreibt die ersten drei Zeilen und dann sind es nicht mehr 3116 sondern mehr oder weniger und dann kommmt der Fehler. So und mache ich es mit eval bekomme ich zwar meine Vektoren aber zuviele da die SChleife ja 43000 mal durchgeht. Vielleicht noch ein Tip so funktioniert es ja, nur die Kleinigkeiten.
Danke
|
|
|
|
|
Status: |
(Frage) überfällig | Datum: | 16:43 Do 05.04.2012 | Autor: | ronchen |
So jetzt habe ich es sieht aber nicht sehr elegant aus könnte mir da jamand noch helfen das umzuformulieren. Danke
sek=2;
anfangsZeit = 1;
for m = 1 : (length(A) )
endZeit = find(B < (m * sek), 1, 'last');
D=A(anfangsZeit:endZeit);
test=sum(D);
if test==0
C=0;
else
eval(['C' num2str(m) '=D']);
end
anfangsZeit = endZeit + 1;
end
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 17:20 Sa 07.04.2012 | Autor: | matux |
$MATUXTEXT(ueberfaellige_frage)
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 17:20 Sa 07.04.2012 | Autor: | matux |
$MATUXTEXT(ueberfaellige_frage)
|
|
|
|
|
Status: |
(Frage) überfällig | Datum: | 08:41 Mo 16.04.2012 | Autor: | ronchen |
So hätte da noch einmal eine kleine Frage. Habe wie oben schon beschrieben meine vektoren erstellt C1,C2......
So nun möchte ich diese miteinander vergleichen, also wie eine for Schleife ungefähr so
for i=1:counter %counter zählt beim Erstellen der vektoren wie oft welche erstellt werden
[p,h]=ranksum(C(i),C(i+1))
end
Das geht natürlich nicht da er ja auf die Spalte in der Matrix zugreifen will, möchte aber mit dem i die Vektorbezeichnung ansprechen also C(i)=C1 usw. wie könnte ich das am besten machen. Wäre für jede Hilfe dankbar.
Ronny
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 09:20 Mi 18.04.2012 | Autor: | matux |
$MATUXTEXT(ueberfaellige_frage)
|
|
|
|