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

if abfrage bei matrix

 

Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.09.2012, 12:03     Titel: if abfrage bei matrix
  Antworten mit Zitat      
hi zusammen!

Mein problem ist folgendes:
ich habe eine 320x360 große matrix, die temperaturwerte enthält. jetzt möchte ich aber nur die werte verwenden, die größer 10 sind.
Probiert hab ich das folgenderweise:

Code:

temperature = temperature(temperature>10)
 


nur macht mir matlab jetzt aus der 320x360 matrix einen 115200 langen vektor.

wie kann ich denn diese bedingungen so stellen, dass am ende die matrix temperature bleibt?

danke!


Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 26.09.2012, 13:16     Titel:
  Antworten mit Zitat      
Es gibt auch andere Alternativen, aber ein allgemeiner Weg ist hinterher RESHAPE zu benutzen.

Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.09.2012, 13:25     Titel:
  Antworten mit Zitat      
hi Andreas!

Danke.

habs jetzt so gemacht:

Code:

temperature = temperature(temperature>10)
temperature = resphape(temperature, 320,360)
 


Rausgekommen ist eine 320x360 Matrix vor davor. Nur jetzt hab ich noch eine Frage: stehen die Werte die größer 10 sind, wieder an der gleichen stelle, wie in der ursprünglichen matrix?

lg,
 
tschun
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 73
Anmeldedatum: 05.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.09.2012, 13:50     Titel:
  Antworten mit Zitat      
Hi,

Alle deine Werte sind über 10. Sonst würde sich mit

Code:

temperature = temperature(temperature>10)
 


die Anzahl der Werte ändern und du könntest nicht auf die Orginalgröße reshapen. Aber ja, in diesem Fall würde die Matrix mit der Orginalmatrix übereinstimmen.


Hier ein kleines Beispiel warum
Code:
temperature = temperature(temperature>10)

einen Vektor ergibt.

Code:

A=randi(10,5,5); % 5x5 Matrix mit Werte von 1 bis 10
B=A(A>5);
 


Im allgemeinen hat B nun weniger Werte (nicht alle sind größer als 5).
Und damit können die ursprünglichen Dimensionen nicht erhalten bleiben.
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.09.2012, 14:00     Titel:
  Antworten mit Zitat      
he,

eigentlich sind schon einige werte kleiner als 10 in derursprünglichen matrix und wenn ich mir nach der abfrage die werte ausgeben alle, sind die enthaltenen werte alle größer. trotzdem bekomm ich die ursprüngliche matrix-größe raus.

was mache ich da falsch?
 
tschun
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 73
Anmeldedatum: 05.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.09.2012, 14:07     Titel:
  Antworten mit Zitat      
Dann muss der "Fehler" schon weiter vorne sein.

Wenn du
Code:
temperature = temperature(temperature>10)

und temperature danach genauso viele Elemente hat wie vorher, sind alle Werte größer als 10.

Hast du vielleicht vergessen die Daten neu einzulesen? Du überschreibst sie ja jedesmal...
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.09.2012, 19:24     Titel:
  Antworten mit Zitat      
hi,

wieso überschreibe ich meine daten jedesmal?
Mit der Abfrage:

Code:

temperature = temperature(temperature > 10
 


überschreibe ich da meine daten?

lg.
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 26.09.2012, 23:28     Titel:
  Antworten mit Zitat      
Hallo,

Versuche es doch einfach mal:
Code:
x = [1,2,3,4,5,6,7,8,9,10];
disp(x);
x = x(x > 5);
disp(x);

Nun sind die Werte von "x" überschrieben.

Wenn nun einzelne Elemente aus einer Matrix gelöscht werden, muss das Ergebnis ein Vektor sein. Andernfalls ließe sich nicht sicherstellen, dass die Ausgabe wieder rechteckig ist, was ja für Matrizen obligatorisch ist.

Gruß, Jan
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.