WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Aufweiten einer Matrix

 

marc

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.07.2009, 14:37     Titel: Aufweiten einer Matrix
  Antworten mit Zitat      
Hallo, so mein nächstes Problem:

Ich habe ein Cell Array 100x1 cell. In dem befinden sich matrizen im Format
1. Zeile 200x2
2. Zeile 196x2
3. Zeile 198x2
usw.

Nun muss ich allerdings die Länge von z.B. 100 auf 600 strecken, sowie auch die Werte der 2. Spalte, die Momente enthalten

Mein Code-Ansatz:
Code:
vektor_600 = t_spektrogramm';
vektor_100 = Momentegefiltert{1};
einzelschritte = length(vektor_600)/length(vektor_100);
vektor_100_neu = zeros(size(vektor_600));
 
for j=1:length(vektor_100)
    vektor_100_neu(j*einzelschritte-(einzelschritte-1):j*einzelschritte) = vektor_100(j);  
end

Code:
%hier werden zwei unterschiedlich große Vektoren  auf eine einheitliche
%Größe gebracht. der kleinste voon beiden -vektor_100- wir aufgespalten und
%auf die Größe vom größten -vektor_600- gestreckt. vektor_100 wir dadurch
%getreckt dass jedes einzelne Eleent mhrmals hintereinander vorkommt, nach
%einem Faktor der das Verhältniss der Größen beide Vektoren bildet.


So das ist der Inhalt bis jetzt. Was es nicht kann ist automatisch das cell-array Zeile für Zeile durchgehen und es stellt mir nicht die 2. Spalte von meinem vektor_100 dar.

Ich suche hier schon eine Weile, allerdings ohne Erfolg. Hat einer eine zündende Idee, was hier das Problem ist und vielleicht auch eine Idee wie ich Matlab sagen kann, dass er alle Zeilen aus dem Cell Array durchsuchen soll?

Bitte um Hilfe.
Grüße Marc


marc

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.07.2009, 15:13     Titel:
  Antworten mit Zitat      
ok den ersten Teil mit den Spalten habe ich hinbekommen:
Code:

vektor_600 = t_spektrogramm;
vektor_100 = Momentegefiltert{1};
einzelschritte = length(vektor_600)/length(vektor_100);
vektor_100_neu = zeros(size(vektor_600));
 
for i=1:length(vektor_100)
    for j=1:2
    vektor_100_neu(i*einzelschritte-(einzelschritte-1):i*einzelschritte,i) = vektor_100(i,j);  
    end
end

So wie aber rufe ich in dem Cell Array die einzelnen Zeilen auf und Speicher es vielleicht am Besten wieder als Cell Array?
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.022
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2023b
     Beitrag Verfasst am: 07.07.2009, 15:21     Titel:
  Antworten mit Zitat      
Moin,

du kannst auf die einzelnen Matrizen in den Cell-Arrays wie gewohnt zugreifen:
Code:
C = {eye(3),eye(3).*4};
C{1}(1,:)
C{2}(:,2)


Gruß
Alex
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
marc

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.07.2009, 15:46     Titel:
  Antworten mit Zitat      
soweit verstanden, aber:

ich greife ja durch

Code:
vektor_100 = Momentegefiltert{1}


auf die erste Zeile praktisch von meiner Matrix zu und im Wert vektor_100_neu speichert er es. Allerdings hätte ich gerne wieder eine Matrix wo nun halt statt
1. Zeile 200x2
2. Zeile 196x2
3. Zeile 198x2
usw

1. Zeile 600x2
2. Zeile 600x2
3. Zeile 600x2
usw

stehen hat.

Wie kann ich das machen?
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.022
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2023b
     Beitrag Verfasst am: 07.07.2009, 16:24     Titel:
  Antworten mit Zitat      
Ich verstehe den Sinn dahinter nicht. Du hast aus den 600 Werten je die rausgesucht, die in den 50 Zeitintervallen liegen. Was und warum willst du wieder auf 600 Werte aufblasen?
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
marc

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.07.2009, 16:32     Titel:
  Antworten mit Zitat      
Ich hab folgendes Problem:
Ich hab mit zwei unterschiedlichen Frequenzen gemessen. Einmal habe ich mit 100Hz Moment, Kraft usw gemessen und mit einem anderen Gerät habe ich Schall mit 500kHz gemessen, allerdings nur alle 60sec 2sec-lang.

Deshalb brauche ich

1. aus dem kontinuierlichem Signal die Momentaufnahmen zu den entsprechenden Zeitpunkten, damit ich dann das Moment in den 2-sec Plot hineintransferieren kann

2. eine Aufweitung des 100Hz Signals in den betreffenden Punkten auf 500Khz damit ich gleichviel Elemente habe und so das ganze Plotten kann.

Das war der Gedankengang und ich bin hier mit meinem Problem vorläufig gerade am Ende und hab noch keine Lösung.

Ist mein Problem nun etwas klarer geworden? Surprised)
Ein bißchen kompliziert das Ganze, und es ist noch lang nicht schluss. Ich bin erst am Anfang und muss mich noch so durch manch andere Sache wühlen. Viel habe ich auch schon so geschafft, aber es hapert doch noch gewaltig ab und zu mit meinen Kenntnissen.

Grüße Marc
 
marc

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.07.2009, 17:45     Titel:
  Antworten mit Zitat      
Hallo nochmal,

Ich bin langsam am verzweifeln, kann mir hier irgendeiner wenigstens einen Tipp geben, nach was ich suchen kann/soll? Ich bekomm es einfach nicht hin.

Merci

P.S. Zum letzten Kommentar von steve:

Ich hab mir aus den 100 Werten die rausgesucht, die in den 50 Zeitintervallen liegen und will diese nun auf 600 aufblasen. Das ist die Vorgehensweise. Sonst wäre es ja echt dämlich!
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.022
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2023b
     Beitrag Verfasst am: 07.07.2009, 17:54     Titel:
  Antworten mit Zitat      
Kannst du mal 2-3 Beispielvektoren geben? Einer mit 10 Einträgen (entspricht den 600) und die anderen mit 3 Einträgen oder so (entsprechen den 100 bzw. 50), damit zu sehen ist, was genau du meinst?
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
marc

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.07.2009, 08:33     Titel:
  Antworten mit Zitat      
Ich kann hier keine mat-files anhängen, leider. Die Ursprungsdateien sind zu groß.

Also beschreib ich nochmal

Ich hab ein Cell array mit 240x1 Einträge

in der Form
200x2
196x2
198x2
200x2
...
jeweils als double.

und nun habe ich noch ein Cell array mit
1x1 Einträgen

mit 3484x6 double

Was ich will ist später ein Cell array mit 240x1 Einträgen der Form

3484x2
3484x2
3484x2
...
Um das zu bewerkstelligen muss ich meine obere Matrix aufweiten und die Einträge mit einem Faktor multiplizieren.
Ich weiß jetzt nicht, wie ich es schaffen kann, dass er mir im oberen Cell Array Zeile für Zeile durchgeht und diesen Prozess vollführt.

Gruß Marc
 
marc

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.07.2009, 15:32     Titel:
  Antworten mit Zitat      
So ich habe etwas gebastelt bekommen, aber erliefert mir nicht das, was ich will

Code:

vektor_lang = t_spektrogramm';
anzahl=numel(Momentegefiltert);
for k=1:anzahl
vektor_kurz = Momentegefiltert{k,:};
einzelschritte = length(vektor_lang)/length(vektor_kurz);
vektor_laenger =cell(size(Momentegefiltert));
    for i=1:anzahl
        for j=1:2
        vektor_laenger{i} =[i*einzelschritte-(einzelschritte-1):i*einzelschritte,j];
        %vektor_laenger(i*einzelschritte-(einzelschritte-1):i*einzelschritte,j) = vektor_kurz(i,j);
        end  
    end ;
 
end


Ich bin leider immer noch nicht weiter.
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.