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

Zeilen einer Matrix nach kriterien raussuchen

 

Morad
Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 14.10.15
Wohnort: München
Version: ---
     Beitrag Verfasst am: 27.10.2015, 11:53     Titel: Zeilen einer Matrix nach kriterien raussuchen
  Antworten mit Zitat      
Hallo.

ich habe eine Matrix, die so aussieht:

A=
45672.443 1 41968 22 -0.022 -0.011 -1.5881 0.96
45672.453 1 41969 25 -0.034 -0.019 -1.5823 0.96
45672.453 1 41969 12 -0.016 -0.009 -1.5763 0.96
45672.463 1 41970 30 -0.048 -0.032 -1.5740 0.97
45672.463 1 41970 30 -0.048 -0.032 -1.5743 0.97
45672.463 1 41970 19 -0.030 -0.016 -1.5700 0.96
45672.473 1 41971 30 -0.057 -0.041 -1.5678 0.97
45672.473 1 41971 20 -0.039 -0.026 -1.5643 0.96
45672.493 1 41972 32 -0.058 -0.047 -1.5644 0.97
45672.493 1 41972 32 -0.058 -0.047 -1.5647 0.97
45672.493 1 41972 20 -0.040 -0.030 -1.5606 0.96
45672.503 1 41973 32 -0.058 -0.054 -1.5568 0.94
45672.503 1 41973 32 -0.058 -0.047 -1.5647 0.97
45672.503 1 41973 21 -0.040 -0.036 -1.5568 0.94
45672.503 1 41973 21 -0.040 -0.033 -1.5597 0.96
45672.513 1 41974 38 -0.056 -0.048 -1.5669 0.90
45672.513 1 41974 38 -0.059 -0.049 -1.5646 0.97
45672.513 1 41974 20 -0.041 -0.034 -1.5587 0.96
45672.513 1 41974 20 -0.041 -0.034 -1.5588 0.96
45672.522 2 42421 33 -0.030 -0.003 -1.5890 0.94
.
.
.
.


ich möchte folgendes tun, wenn die Werte in der ersten Spalte gleich bleiben, will ich innerhalb dieses die erste Zeile, die letze Zeile und die Zeile mit dem höchsten absoluten Wert in der 5ten Spalte. z.B aus

45672.513 1 41974 38 -0.056 -0.048 -1.5669 0.90
45672.513 1 41974 38 -0.059 -0.049 -1.5646 0.97
45672.513 1 41974 20 -0.041 -0.034 -1.5587 0.96
45672.513 1 41974 20 -0.041 -0.034 -1.5588 0.96

brauche ich
45672.513 1 41974 38 -0.056 -0.048 -1.5669 0.90
45672.513 1 41974 38 -0.059 -0.049 -1.5646 0.97
45672.513 1 41974 20 -0.041 -0.034 -1.5588 0.96


ich habe es damit versucht
Code:
for i=1:length(A(:,1))
if A(i,1) == A(i+1:end,1);
      idx1=find(max(abs(A(i:5))));  
else idx2 = A(i,1)
  end
end


leider funktioniert es nicht, es kommt zwar keine Fehlermeldung aber es liefert keine Ergebnisse.

Hat jemand eine Idee wie ich das machen soll, bzw. was ich falsch mache.

besten Dank.

Gruß.
edit winkow: bitte code umgebung verwenden
_________________

12
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: 27.10.2015, 13:31     Titel:
  Antworten mit Zitat      
Code:
if A(i,1) == A(i+1:end,1);

Zitat:
An expression is true when its result is nonempty and contains only nonzero elements (logical or real numeric). Otherwise, the expression is false.

das wird also so nicht funktioneiren.
ich würde mit find und diff erstmal suchen wo sich die werte in der ersten spalte ändern und das dann mit der schleife abarbeiten.
Code:
idx1=find(max(abs(A(i:5))));  

max hat 2 rückgabe werte. unter anderem den index. ich denke find ist nicht nötig
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Morad
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 14.10.15
Wohnort: München
Version: ---
     Beitrag Verfasst am: 27.10.2015, 16:21     Titel:
  Antworten mit Zitat      
Vielen Dank.

Ich bin jetzt einen anderen Weg gegangen. Ich habe die Matrix geteilt in kleinere Matrizen, die den gleichen Wert in der ersten Spalte haben und diese in einem Cell gespeichert. es ist mir auch gelungen den max in der 5ten Spalte jeder Matrix herauszulesen

Code:
a=unique(A(:,1));
c=cell(length(a),1);
for i=1:length(a);  
c{i}=A(A(:,1)==a(i) ,  :  );
end

for k=1:length(c)
    M(k)= max(c{k}(:,5));
end


jetzt möchte ich die Positionen bzw den Index von diesen max herauszufinden.
Ich habe es u.a damit versucht,
Code:
I = cell(size(c));
for ii = 1:numel(I)
    for k = 1:length(M)
    I{kk} = find(c{ii}(:,5) == M(k));
    end
end
 

ich krieg es leider nicht hin.

Gruß
edit winkow: ok 2. versuch... bitte code umgebung verwenden
_________________

12
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: 27.10.2015, 16:30     Titel:
  Antworten mit Zitat      
warum versuchst du es nicht so wie ich vorgeschlagen habe?
dein neuer code macht etwas ganz anderes als du oben beschrieben hast. nur unter der bedingung das die werte monton sind macht er das gleiche.
Zitat:
ich krieg es leider nicht hin.

das ist keine sehr aussagekräftige fehlerbeschriebung.
Code:
   for k = 1:length(M)
    I{kk} = find(c{ii}(:,5) == M(k));
    end

die variable kk tritt ein deinem code nicht auf.
und ich habe bereits gesagt das max auch den index zurück gibt. ich seh denn sinn nicht vorschläge zu machen wenn du überhaubt nicht drauf eingehst.
_________________

richtig Fragen
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.