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

Matrizen mit NaN addieren

 

HomerJ
Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 09.04.10
Wohnort: ---
Version: 7.0
     Beitrag Verfasst am: 07.08.2010, 22:56     Titel: Matrizen mit NaN addieren
  Antworten mit Zitat      
Hallo alle!

Kennt jemand einen Befehl, mit dem man zwei Matrizen mit NaN Werten addieren kann, ohne, dass NaN + x = NaN ist? Ich glaube im Statistik Paket gibt es
Code:
. Aber dieser Befehl funktioniert (meines Wissens nach) nur mit einer Matrix und addiert dann die Elemente Spaltenweise.
- man könnte natürlich NaN durch Null ersetzen, aber das gäbe dann später bei der Berechnung des Mittelwertes Probleme.

Viele Grüße
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 07.08.2010, 23:32     Titel:
  Antworten mit Zitat      
Hallo,

Gegenfrage: was soll denn bei NaN + x sonst rauskommen?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
HomerJ
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 09.04.10
Wohnort: ---
Version: 7.0
     Beitrag Verfasst am: 08.08.2010, 12:42     Titel:
  Antworten mit Zitat      
Einfach der Wert x, also NaN+x=x.

Viele Grüße,
Martin
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 08.08.2010, 13:04     Titel:
  Antworten mit Zitat      
Hallo,

dann setz die NaN-Werte doch für diesen Zweck auf 0?
Code:


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
HomerJ
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 09.04.10
Wohnort: ---
Version: 7.0
     Beitrag Verfasst am: 08.08.2010, 13:55     Titel:
  Antworten mit Zitat      
Hi!

Hm...und wie unterscheidet man dann diese Werte von den "wirklichen Nullen"? Mit Indizierung vielleicht?

- Also das Problem ist folgendes: Ich habe mehrere Matrizen (mit NaN Werten zwischendurch) die ich addieren will. Danach "spalte" ich diese Matrix in 5x5 Cells auf und bilde darüber den Mittelwert. Wenn ich jetzt die NaN Werte Null setze, so hat dies doch Auswirkungen auf den Mittelwert oder?
Gibt es vielleicht ne andere Möglichkeit?

Viele Grüße,
Martin
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 08.08.2010, 17:09     Titel:
  Antworten mit Zitat      
Hallo,

wenn es um Mittelwertberechnungen geht, ist die beste Alternative wohl
Code:


Natürlich beeinflussen Nullen den Mittelwert - indem sie ihn "nach 0 ziehen".

Damit man mehr Tips geben kann, müsstest du mehr über die Anwendung sagen. Wäre es zum Beispiel eine Möglichkeit, die NaN in irgendeiner Form durch interpolierte Werte zu ersetzen?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
HomerJ
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 09.04.10
Wohnort: ---
Version: 7.0
     Beitrag Verfasst am: 08.08.2010, 20:16     Titel:
  Antworten mit Zitat      
Das Problem ist folgendes: Ich habe eine 180x90 Matrix (2 Grad x 2 Grad) mit Temperaturdaten (wovon einige Fehlen, also NaN) und will diese auf 360x180 (1 Grad x 1 Grad) "hochinterpolieren". Das mach ich z.B. mit
Code:

Anschließend berechne ich daraus ein 72x36 (5 Grad x 5 Grad) "Grid" und stelle das ganze sortiert in einem 2592x1 Vektor da. Etwa so:
Code:

summe=mat2cell(summe,repmat(5,1,72),repmat(5,1,36));
summe=reshape(summe,2592,1);
for i=1:1:2592
    c(i,:)=nanmean(summe{i});
end
c=transpose(c);
d=mat2cell(c,repmat(5,1,1),repmat(1,1,2592));
d=transpose(d);
for i=1:1:2592
    e(i,:)=nanmean(d{i});
end
 


Hast Du vielleicht einen Vorschlag wie ich es anders machen könnte?

Viele Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 09.08.2010, 00:02     Titel:
  Antworten mit Zitat      
Hallo,

ich muss sagen, ich kann deiner Strategie nicht ganz folgen.
Jedenfalls würde ich interp2 dafür nehmen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
HomerJ
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 09.04.10
Wohnort: ---
Version: 7.0
     Beitrag Verfasst am: 09.08.2010, 23:22     Titel:
  Antworten mit Zitat      
Hi!

Was genau ist unklar?
- Ich glaube ich habe eine andere Lösung... . Kann man die Zeilen von zwei Matrizen "untereinanderschieben"? Also etwa
Code:

A=[1 2; 3 4];
 

und
Code:

B=[5 6; 7 8];
 

ergibt
Code:

C=[1 2; 5 6; 3 4; 7 8]
 

Dann könnte man das ganze zu Cells machen und
Code:
verwenden.

Viele Grüße, Martin
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 10.08.2010, 11:24     Titel:
  Antworten mit Zitat      
Hallo,

Lösungsvorschlag für diese Frage:

Code:
C=zeros(2*size(A,1) , size(A,2));
C(1:2:end,:) = A;
C(2:2:end,:) = B;


Das geht allerdings erstmal nur für Matrizen A, B mit gleicher Zeilenanzahl.

Was den Code angeht, kann ich auf den ersten Blick einfach nicht nachvollziehen, was da passiert und was damit bezweckt wird.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
HomerJ
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 09.04.10
Wohnort: ---
Version: 7.0
     Beitrag Verfasst am: 12.08.2010, 00:09     Titel:
  Antworten mit Zitat      
Hallo nochmal!

Danke für Deinen Tipp. Ok, ich sehe ich habe nur einen Teil des Codes gepostet. Das kommt davon wenn man zu spät schlafen geht Very Happy
- Der Code sollte eigentlich nur 360x180 Matrizen addieren (mit NaN's drin), das Ganze zu 5x5 Cells (also eine 72x36 Cell Matrix) machen und den Mittelwert darüber bilden. Die Matrix habe nur zu einem Vektor 'reshaped', weil ich nicht wusse wie man
Code:
auf eine 'Cellmatrix' anwendet.
Code:

for i=1:1:n
 for j=1:1:m
  c(i,j)=nanmean(matrix{i,j});
end
end
 

..funktioniert irgendwie nicht Sad

Viele Grüße,
Martin
Private Nachricht senden Benutzer-Profile anzeigen
 
santa claus
Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 25.11.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.08.2010, 07:18     Titel:
  Antworten mit Zitat      
Nochmal zu deinem ursprünglichen Problem zwei Matrizen zu addieren, bei denen einzelne Elemente NaN sind, das Ergebnis aber NaN+x=x sein soll:

Code:

A=[NaN 10 2 3;1 NaN 3 4];
B=[1 NaN 3 4; 1 1 1 1];

C=A+B;
C(isnan(A))=B(isnan(A));
C(isnan(B))=A(isnan(B));

 


Ich hoffe damit sind auch die nachfolgenden Probleme mit dem Mittelwert gelöst.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 12.08.2010, 10:45     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
..funktioniert irgendwie nicht

Bitte immer dazuschreiben, WIESO etwas nicht funktioniert.

Hier die Vermutung: wenn der Inhalt des Cell Arrays eine 5x5-Matrix ist, wird für jede Spalte der Mittelwert berechnet, d.h. du bekommst einen 1x5-Vektor. Und das kann man nicht in ein Element einer Matrix schreiben. Schau dir auch mal CELLFUN an.

Grüße,
Harald
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.