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

2 Arrays: Naheliegenden Wert finden

 

BB

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.06.2009, 17:19     Titel: 2 Arrays: Naheliegenden Wert finden
  Antworten mit Zitat      
Hallo,
ich habe 2 Arrays:
A=[ 1 5 8 16 20]
B=4

und jetzt bin ich auf der Suche nach einer Funktion die mir den Wert ausgibt, der am nächsten an B dran ist. Das wäre als 4 in diesem fall.

Und noch eine Frage:
A=[1 3 8 177 500]
B=[3 500]
jetzt möchte ich aus A die Werte löschen, die in B stehen...

Fällt zufällig jemand ne schöne Lösung ein?

Gruß


steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.029
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2024a
     Beitrag Verfasst am: 11.06.2009, 17:40     Titel:
  Antworten mit Zitat      
Moin,

solche Sachen wurden hier schon häufiger gelöst...

Zu 1.
Code:
A=[ 1 5 8 16 20];
B=4;
nahesterWert = A(abs(A-B)==min(abs(A-B)))
 


Zu 2.
Code:
A=[1 3 8 177 500];
B=[3 500];
A(A==B(1) | A == B(2)) = []

Sobald der Vektor B größer wird, ist diese Lösung nicht mehr zu empfehlen, aber mir fällt grad auch keine andere ohne Schleife ein...

Gruß
Alex
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
Maddy
Ehrenmitglied

Ehrenmitglied



Beiträge: 494
Anmeldedatum: 02.10.08
Wohnort: Greifswald
Version: ---
     Beitrag Verfasst am: 11.06.2009, 19:13     Titel:
  Antworten mit Zitat      
für das 2. Problem würde ich vorschlagen:

Code:

A=[1 3 8 177 500];
B=[3 500];
C=A(~ismember(A,B))

_________________

>> why
The computer did it.
Private Nachricht senden Benutzer-Profile anzeigen
 
BB

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.06.2009, 19:47     Titel:
  Antworten mit Zitat      
ihr seid die Besten!

genau so geile Lösungen suche ich!

jeweils ein einzeiler... ne genial einfache Lösung! SUPER!! Smile
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.029
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2024a
     Beitrag Verfasst am: 11.06.2009, 20:02     Titel:
  Antworten mit Zitat      
@maddy: Genau, so wars... Wollte mir einfach nicht einfallen Laughing

Gruß
Alex
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
joggel.v
Forum-Anfänger

Forum-Anfänger


Beiträge: 26
Anmeldedatum: 07.12.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.07.2012, 10:12     Titel:
  Antworten mit Zitat      
Hallo Zusammen,
muss diesen Thread nochmals auffrischen...

Ich bin auf der Suche nach einer Lösung um zwei unterschiedlich lange Vektoren:

Code:

A=[100 200 499 700 800 980 1300];
B=[500 1000];
 


ähnlich der Lösung von Oben auf gleiche Länge zu bringen. Diese funktioniert leider nur wenn B ein einzelner Wert ist.
Code:

A=[ 1 5 8 16 20];
B=4;
nahesterWert = A(abs(A-B)==min(abs(A-B)))
 


Es soll also immer der naheliegenste wert von den Einträgen von B im Vektor A gesucht werden, sodass ich einen Vektor C erhalte der wie folgt aussieht:

Code:

C=[499 980]
 


Jemand eine Idee? Tausend Dank schon mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 11.07.2012, 14:23     Titel:
  Antworten mit Zitat      
Hallo joggel.v,

Wie wäre es mit einer Schleife über die Werte von B?

Per BSXFUN läßt sich das zwar auch ohne Schleife machen, bei größeren Vektoren wird dies aber durch das Erstellen einer temporären riesigen Matrix ineffizient.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
joggel.v
Forum-Anfänger

Forum-Anfänger


Beiträge: 26
Anmeldedatum: 07.12.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.07.2012, 09:32     Titel:
  Antworten mit Zitat      
Danke Jan,
so funktioniert es einwandfrei:

Code:

A=[100 200 499 700 800 980 1300];
B=[500 1000];

for i=1:length(B)
nahesterWert(i) = A(abs(A-B(i))==min(abs(A-B(i))));
end

 
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.