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:
Hat jemand eine Idee, wie ich das machen könnte?
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%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:
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:
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 .
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)
Tags und Links arrays comparison matlab