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

Werte aus Matrix anhand Vektor auslesen

 

778
Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 21.07.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.09.2016, 13:37     Titel: Werte aus Matrix anhand Vektor auslesen
  Antworten mit Zitat      
Hallo,

Ich möchte aus einer Matrix Werte aus einer bestimmten Stelle auslesen.

Code:
% Das ist meine Matrix und der Vector, der angibt aus welcher Stelle ein Wert ausgelesen werden soll.
a = [122 123 124; 125 126 127; 128 129 130];
b = [1;2;3];


Code:
% Das soll das Ergebnis sein.
c = [122; 126; 130];
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


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

b gibt also an, welche Zeile aus der jeweiligen Spalte ausgelesen werden soll? Dann
Code:
a(sub2ind(size(a), b, (1:3)'))


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

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 21.07.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.09.2016, 13:57     Titel:
  Antworten mit Zitat      
Vielen Dank für die schnelle Antwort.

b gibt an, dass aus der 1. Zeile der Wert aus der 1. Spalte ausgelesen werden soll, aus der 2. Zeile der Wert aus der 2. Spalte usw.

Steht also in der 4. Zeile von b eine 7
soll aus der 4. Zeile der Wert aus der 7.Spalte von a ausgelesen werden
und in der 4. Zeile, 1. Spalte von c gespeichert werden.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.500
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 14.09.2016, 15:08     Titel:
  Antworten mit Zitat      
Hallo,

dann müsstest du im Code das b und das (1:3)' vertauschen.
Hast du den Vorschlag denn mal versucht?

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 21.07.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.09.2016, 17:16     Titel:
  Antworten mit Zitat      
Juhuuu! Das klappt ganz großartig. vielen Dank
Private Nachricht senden Benutzer-Profile anzeigen
 
778
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 21.07.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.03.2017, 13:58     Titel: und wenn noch NaNs dabei sind?
  Antworten mit Zitat      
Hallo,

nun habe ich exakt das gleiche Problem wieder, nur dass diesmal sowohl in a als auch in b NaNs vorkommen. Hat dafür jemand eine Lösung?
Private Nachricht senden Benutzer-Profile anzeigen
 
gs
Forum-Century

Forum-Century


Beiträge: 172
Anmeldedatum: 17.03.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.03.2017, 14:14     Titel:
  Antworten mit Zitat      
Hi,

ich würde die NaN's rausfiltern

schau hier, da gibt's ne Funktion zu:
http://de.mathworks.com/help/matlab/ref/isnan.html

Gruß
gs
_________________

Mein Seite.
Private Nachricht senden Benutzer-Profile anzeigen
 
778
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 21.07.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.03.2017, 14:37     Titel:
  Antworten mit Zitat      
Hi gs,

das ist in der wirklich ein guter Tip! schade ist nur, dass bei isnan der Vector die Information verliert, aus welcher Spalte der Matrix ein Wert ausgelesen werden soll. Ziel ist aber, dass die NaNs als solche erhalten bleiben, während alle anderen Werte ausgelesen werden.

Code:
% Das ist meine Matrix (a) und der Vector (b), der angibt aus welcher Stelle ein Wert ausgelesen werden soll.
a = [122 123 124; NaN 126 127; NaN NaN 130];
b = [1;NaN;3];

% Das soll das Ergebnis sein.
c = [122; NaN; 130];
 
Private Nachricht senden Benutzer-Profile anzeigen
 
778
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 21.07.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.03.2017, 14:53     Titel:
  Antworten mit Zitat      
Habe jetzt eine Lösung gefunden. Falls jemand aber einen eleganteren Weg kennt, könnte man diesen als Problemlösung hier ja auch noch festhalten.

Code:

for k = 1:size(b,1)
    if sum(b(k,:),'omitnan')==0;
        c (k,:)=NaN;
    else n = a(:,b(k));
        c(k,:) = n(k);
    end
end
 


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