Gibt an, ob ein Wert dem Wert eines Array-Elements in MATLAB entspricht

7

Kann mir jemand sagen, ob es einen Weg gibt (in MATLAB), um zu überprüfen, ob ein bestimmter Wert mit irgendeinem der in einem anderen Array gespeicherten Werte übereinstimmt?

Die Art und Weise, wie ich es verwenden möchte, besteht darin, zu prüfen, ob ein Elementindex in einer Matrix den in einem anderen Array gespeicherten Werten entspricht (wobei die gespeicherten Werte die Indizes der Elemente sind, die ein bestimmtes Kriterium erfüllen) >

Wenn also die Indizes der Elemente, die die Kriterien erfüllen, in der folgenden Matrix gespeichert sind:

%Vor%

Gehen Sie durch das Haupt-Array (namens array ) und prüfen Sie, ob der Index übereinstimmt:

%Vor%

Hat jemand eine Idee, wie ich das machen könnte?

    
James 14.03.2010, 15:11
quelle

5 Antworten

19

Die ausgezeichnete Antwort von @woodchips gilt auch hier:

Viele Möglichkeiten, dies zu tun. ismember ist der erste, der einem einfällt, da es sich um eine festgelegte Mitgliedschaftsaktion handelt. Also

%Vor%

Da 15 nicht prim ist, aber 17 ist, hat das Mitglied seine Arbeit hier gut gemacht.

Natürlich wird (oder irgendein) auch funktionieren. Aber diese sind nicht in dem Sinne vektorisiert, wie das Mitglied war. Wir können prüfen, ob 15 in der durch X dargestellten Menge ist, aber um diese beiden Zahlen zu testen, wird eine Schleife oder aufeinanderfolgende Tests durchgeführt.

%Vor%

oder

%Vor%

Abschließend möchte ich darauf hinweisen, dass Tests auf exakte Werte gefährlich sind, wenn die Zahlenwerte tatsächlich schwanken. Tests gegen ganzzahlige Werte, wie ich gezeigt habe, sind einfach. Aber Tests gegen Gleitkommazahlen sollten normalerweise eine Toleranz verwenden.

%Vor%     
Pentium10 14.03.2010 15:17
quelle
3

Sie könnten den Suchbefehl

verwenden %Vor%     
groovingandi 14.03.2010 15:16
quelle
3

Hinweis: Obwohl diese Antwort nicht auf die Frage im Titel eingeht, behandelt sie doch ein fundamentaleres Problem mit der Gestaltung Ihrer for-Schleife (deren Lösung das, was Sie fordern, nicht tun kann) der Titel). ;)

Basierend auf der for-Schleife, die Sie geschrieben haben, scheint Ihr Array criteriacheck eine Menge von Indizes in array zu sein, und für jedes dieser indizierten Elemente möchten Sie etwas berechnen. Wenn dies der Fall ist, können Sie Ihre for-Schleife folgendermaßen gestalten:

%Vor%

Damit werden alle Werte in criteriacheck durchlaufen, wobei i auf jeden nachfolgenden Wert gesetzt wird (d. h. 3, 5, 6, 8 und 20 in Ihrem Beispiel). Dies ist kompakter und effizienter, als jedes Element von array zu durchlaufen und zu überprüfen, ob der Index in criteriacheck steht.

HINWEIS: Wie Jonas darauf hinweist, möchten Sie sicherstellen, dass criteriacheck ein Zeilenvektor ist, damit die for-Schleife ordnungsgemäß funktioniert. Sie können jede Matrix zu einem Zeilenvektor zusammenfassen, indem Sie sie mit der (:)' -Syntax verwenden, die lautet wandelt es in einen Spaltenvektor um und dann transponiert es in ein Zeilenvektor:

%Vor%     
gnovice 14.03.2010 18:46
quelle
1

Die ursprüngliche Frage "Kann mir jemand sagen, ob es einen Weg (in MATLAB) gibt, um zu überprüfen, ob ein bestimmter Wert gleich einem der in einem anderen Array gespeicherten Werte ist?" kann ohne irgendeine Schleife gelöst werden.

Verwenden Sie einfach die Funktion setdiff .

    
Trilarion 06.11.2012 16:56
quelle
0

Ich denke, die INTERSECT-Funktion ist, was Sie suchen.

  

C = schneiden (A, B) gibt die gemeinsamen Werte für A und B zurück   Werte von C sind in sortierter Reihenfolge.

Ссылка

Die Frage if i == 'Any value stored in criteriacheck kann auch auf diese Weise beantwortet werden, wenn Sie i eine triviale Matrix betrachten. Mit any(i==criteriacheck)

ist es Ihnen jedoch wahrscheinlich besser     
Konstantin Schubert 10.04.2013 13:38
quelle

Tags und Links