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

Bestimmte Werte aus einer Matrix auslesen

 

kramka

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.05.2012, 13:03     Titel: Bestimmte Werte aus einer Matrix auslesen
  Antworten mit Zitat      
Hallo,

vorneweg ich bin nicht sonderlich gut in Matlab, bis jetzt hat es für meine Aufgaben jedoch immer gereicht.

Mein Problem ist, dass ich aus einer Matrix mit 26x84060 Werten aus jeder Zeile jeweils 37 Werte Auslesen, 107überspringen und wieder 37 auslesen will. Das sollte dann eine neue Matrix mit 26x21015 Werten ergeben.

Mein 1. Ansatz war es, eine Schleife zu bauen, in etwa so:

Code:

for i = 1: 584
   
    T_vormittag(l:l+36) = T_vormittag1(k:k+36);
    k = k +144;
    l = l+36;
   
   

end
 

Ich weiss leider nicht genau, wie ich das jetzt für all Zeilen der Matrix hinbekommen.

Ich hoffe ich habe mein Problem einigermaßen verständlich formuliert und ihr könnt mir dabei helfen. Dass es auch ohne Schleifen geht, weiss ich, jedoch würde ich den Code auch gerne verstehen. Deswegen wär ich sehr dankbar für eine leicht zu verstehende Lösung die gerne auch etwas umständlich sein kann.

Mit freundlichen Grüßen

kramka


knarrre
Forum-Anfänger

Forum-Anfänger


Beiträge: 16
Anmeldedatum: 27.03.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.05.2012, 13:37     Titel:
  Antworten mit Zitat      
Also ich verstehe das jetzt mal so, dass du 26 Zeilen hast und jede hat ca 84060 Spalten.
Ich nenne das jetzt mal x-Zeilen und y-Spalten.

Nun willst du aus jeder Zeile 37 Spalten auslesen und dann 107 überspringen.

Also musst du dich so orientieren, dass die Sachen, die du immer machen willst, die innersten Schleifen sind und andersrum:

Code:

y=0;
n=1;
for x=1:26
do while y<84061
for i=1:37
y=y+i;
T_Vormittag_neu(n,x)=T_Vormittag(y,x); %Die neuen Zeile n sollen ja nicht um 107 addiert werden...
n=n+1;
end
y=y+107; %jedesmal wenn wieder 37 Zeilen gelesen wurden, 107 überspringen
end
end
 


Ungefär so...?
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 08.05.2012, 13:46     Titel:
  Antworten mit Zitat      
Code:
A=rand(26,84060);
B=repmat([ones(1,37),zeros(1,107)],26,584);
B=B(:,1:84060)==1;
C=reshape(A(B),26,[]);
Private Nachricht senden Benutzer-Profile anzeigen
 
knarrre
Forum-Anfänger

Forum-Anfänger


Beiträge: 16
Anmeldedatum: 27.03.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.05.2012, 14:01     Titel:
  Antworten mit Zitat      
Das sieht elegant aus! Das muss ich gleich probieren!


..."Matlab"!
Private Nachricht senden Benutzer-Profile anzeigen
 
kramka

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.05.2012, 14:15     Titel:
  Antworten mit Zitat      
@ winko: Danka das Funktioniert. Jetzt muss ich das nurnoch verstehen Smile

@ knarre. hm leider kommt dann der Fehler:
??? Attempted to access T_vormittag1(28,1); index out of bounds because
size(T_vormittag1)=[26,84060].

da scheint etwas mit den Schleifen woh lnicht ganz zu Funktioneren. Trotzdem Danke für die Hilfe


Gruß
 
knarrre
Forum-Anfänger

Forum-Anfänger


Beiträge: 16
Anmeldedatum: 27.03.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.05.2012, 15:49     Titel:
  Antworten mit Zitat      
Smile Naja klar, du hast ja T_Vormittag(26,84060)
Also 26 Spalten und 84060 Zeilen. Ich habe mich schon gewundert!
Dann musst du halt Zeilen und Spalten bei mir vertauschen.

Aber ich denke wenn man mit Matlab arbeitet sollte man es eh lieber so wie winko gezeigt hat machen!
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 08.05.2012, 17:37     Titel:
  Antworten mit Zitat      
man muss es nicht so mache wie ich^^ forschleifen sind auch nicht so langsam und meist is einfacher zu verstehen was gemacht wird. wenn du einfach meine lösung kopierst hast ja nix gewonnen ^^
Private Nachricht senden Benutzer-Profile anzeigen
 
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 - 2025 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.