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

Suche Äquivalent zum Excel-SVERWEIS

 

mrks_94
Forum-Anfänger

Forum-Anfänger


Beiträge: 25
Anmeldedatum: 13.06.18
Wohnort: ---
Version: R2018a
     Beitrag Verfasst am: 28.06.2018, 14:36     Titel: Suche Äquivalent zum Excel-SVERWEIS
  Antworten mit Zitat      
Hallo alle miteinander!

ich stehe vor einem kleinen Problemchen und zwar:

Ich habe eine Matrix A und einen Vektor B unterschiedlicher Größe, welche ausschließlich Zahlen enthalten (double):

Matrix A (2510x2), also 2 Spalten und 2510 Zeilen
Vektror B (525591x1), also 1 Spalte und 525591 Zeilen

Alle Werte des Vektors B sind dabei in der ersten Spalte von A enthalten und kommen somit mehrmals vor. In A kommt jeder Wert nur ein mal vor.
Nun soll wenn B == A(:,1) der dazugehörige Wert der zweiten Spalte A(:,2) in einem neuen Vektor C ausgegeben werden.

Beispiel:
Wenn der zweite Wert von B in Zeile 100 der ersten Spalte von A gefunden wird, soll der Wert der zweiten Spalte und 100. Zeile von A ausgegeben und in C gespeichert werden.

Unterm Strich:
Wenn ein Wert von B einem Wert der ersten Spalte von A gleicht, so soll der dazugehörige Wert (gleiche Zeile) der zweiten Spalte von A ausgegeben werden.


Liebe Grüße und schonmal vielen Dank für eure Antworten!
Private Nachricht senden Benutzer-Profile anzeigen


J0nas
Forum-Century

Forum-Century


Beiträge: 208
Anmeldedatum: 10.09.15
Wohnort: ---
Version: ab 2016a
     Beitrag Verfasst am: 29.06.2018, 13:09     Titel:
  Antworten mit Zitat      
Hallo mrks_94,

meinst du so?

Code:
C = A(find(A(:,1)==B(X)),2);


Wobei X für die entsprechende Zeile von B steht.

Grüße
Newbie Cool
Private Nachricht senden Benutzer-Profile anzeigen
 
mrks_94
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 25
Anmeldedatum: 13.06.18
Wohnort: ---
Version: R2018a
     Beitrag Verfasst am: 29.06.2018, 14:14     Titel:
  Antworten mit Zitat      
Danke für die Antwort!
Ich möchte nun nur, dass X eine Laufvariable einer Schleife ist, sodass Vektor C ebenfalls die Dimension (525591x1) hat.

Ich habe es so probiert, erhalte allerdings einen Error (Assignment has more non-singleton rhs dimensions than non-singleton subscripts):

Code:

for n = 1:length(B)
C(n,:) = A(find(A(:,1) == B(n)),2);
end
 


Ich habe hier sicherlich einen Syntaxfehler.


Ich habe außerdem gerade einen Threat gefunden, in dem das gleiche Problem beschrieben wird:

https://www.gomatlab.de/elemente-in.....t-hinzufuegen-t26909.html

Statt einer Frequenz habe ich eine Windgeschwindigkeit und statt der Temperatur eine Leistung. Es soll also jeder Windgeschwindgkeit von B einer Leistung zugeordnet werden (2. Spalte A). Die Matrix A hat in der ersten Spalte die Windgeschwindigkeit und in der zweiten die dazugehörige Leistung. Übertragen auf meines wäre es folgender Code:

Code:

for n = 1:size(B,1)
    P = B(n,1) == A(:,1);
    C(n,:)=[B(n,1),A(P,2)];
end
 


Das Problem hierbei ist, dass die Schleife nach 4034 Durchläufen abbricht. Bei den bereits realisierten Durchläufen funktioniert die Zuordnung. Die Error-Meldung ist folgende:


Error using horzcat
Dimensions of matrices being concatenated are not consistent.

Gruß
Markus
Private Nachricht senden Benutzer-Profile anzeigen
 
mrks_94
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 25
Anmeldedatum: 13.06.18
Wohnort: ---
Version: R2018a
     Beitrag Verfasst am: 03.07.2018, 15:35     Titel:
  Antworten mit Zitat      
Ich konnte das Problem mit folgendem Code lösen:

Code:

for n = 1:size(B,1)
    P = B(n,1) == A(:,1);
    C(n,:)=[B(n,1),A(P,2)];
end
 


Der Error kam aufgrund doppelter Werte in der ersten Spalte von A.


Jetzt muss ich es noch etwas erweitern und eine Bedingung hinzufügen.
Die Matrix A ist dabei eine Referenzkennlinie einer Windkraftanlage, in welcher einer Windgeschwindigkeit die daraus resultierende Leistung zugeordnet wird und Vektor B enthält Messwerte der Windgeschwindigkeit. Nun habe ich bei einer anderen Anlage zwei Kennlinien. Die zweite repräsentiert einen gedrosselten Modus.

A hat in diesem Fall die Dimension (2510x3).
Spalte 1: Windgeschwindigkeit
Spalte 2: Leistung normal
Spalte 3: Leistung gedrosselt

B ist nun eine Matrix mit zwei Spalten (525591x2).
Spalte 1: Windgeschwindgkeit
Spalte 2: index

Der Index hat die Werte 1 oder 0.

Nun soll der Windgeschwindkeit aus B, welche einen Index von 1 hat, eine Leistung der zweiten Spalte von A zugewiesen werden. Ist der Index 0, der entsprechende Wert aus der dritten Spalte. Ich habe es so probiert, was allerdings zu einem falschen Ergebnis führt (kein Error).

Code:

C = zeros(length(B),2);
for n = 1:length(B)
    P = B(n,1) == A(:,1);
   
    if B(:,2) == 0
    C(n,:)=[B(n,1),A(P,3)];

    else C(n,:)=[B(n,1),A(P,2)];
    end
end
 


Ich hoffe, es ist so weit nachvollziehbar und schonmal vielen Dank im Voraus!
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 - 2024 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.