Feststellung, ob ein Wert gleich dem Wert von jedem array-element in MATLAB
Kann mir jemand sagen ob es eine Möglichkeit gibt (in MATLAB), um zu überprüfen, ob ein bestimmter Wert ist gleich wie beliebige Werte gespeichert, die in einem anderen array?
Die Art, wie ich beabsichtige, es zu benutzen ist zu überprüfen, ob ein element index in einer matrix ist gleich der gespeicherten Werte in ein anderes array (wo die gespeicherten Werte sind die Indizes der Elemente, die einem bestimmten Kriterium entsprechen).
So, wenn die Indizes der Elemente, die die Kriterien erfüllen, werden gespeichert in der matrix unter:
criteriacheck = [3 5 6 8 20];
Gehen durch das Haupt-array (genannt array
) und prüfen, ob der index entspricht:
for i = 1:numel(array)
if i == 'Any value stored in criteriacheck'
%# "Do this"
end
end
Hat jemand eine Idee, wie könnte ich dies angehen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die ausgezeichnete Antwort zuvor gegeben durch @Hackschnitzel auch hier gilt:
Viele Möglichkeiten, dies zu tun. ismember ist das erste, das mir einfällt, da es eine Reihe die Mitgliedschaft in Aktion, die Sie nehmen möchten. So
Da 15 nicht prim, aber 17 ist, ismember hat seinen job gut gemacht hier.
Natürlich finden (oder überhaupt) funktioniert auch. Diese sind aber nicht vektorisiert in dem Sinne, dass ismember war. Wir können testen, um zu sehen, ob 15 ist in dem set vertreten durch X, aber testen Sie diese beiden zahlen wird eine Schleife oder bei den aufeinander folgenden tests.
oder,
Schließlich möchte ich darauf hinweisen, dass die tests für die genauen Werte sind gefährlich, wenn die zahlen wahr sein kann, schwimmt. Tests gegen ganzzahlige Werte, wie ich gezeigt habe, sind einfach. Aber tests gegen floating-point-zahlen sollten in der Regel beschäftigen eine Toleranz.
können Sie den Befehl suchen
Hinweis: Obwohl diese Antwort nicht auf die Frage im Titel, es befasst sich mit einem grundlegenden Problem mit, wie Sie entwerfen Ihre for-Schleife (die Lösung, die verhindert haben, das zu tun, was Ihr bittet im Titel). 😉
Auf der Basis der for-Schleife, die Sie geschrieben haben, das array
criteriacheck
erscheint eine Reihe von Indizes, inarray
, und für jede dieser indizierten Elemente, die Sie wollen, um einige der Berechnung. Wenn dies so ist, hier ist eine alternative Möglichkeit für Sie, Ihre design-for-Schleife:Wird diese Schleife über alle Werte in
criteriacheck
Einstellungi
für jeden weiteren Wert (z.B. 3, 5, 6, 8, und 20 in deinem Beispiel). Dieser ist kompakter und effizienter als Schleife über jedes elementarray
und prüfen, ob der index ist incriteriacheck
.HINWEIS:, Wie Jonas zeigt, werden Sie wollen, stellen Sie sicher, dass
criteriacheck
ist ein zeilenvektor für die for-Schleife ordnungsgemäß funktioniert. Sie bilden eine matrix in einen zeilenvektor von nachfolgenden mit der(:)'
syntax, die formt es zu einem Spalten-Vektor und dann fallen in einen zeilenvektor:Die ursprüngliche Frage "Kann mir jemand sagen ob es eine Möglichkeit gibt (in MATLAB), um zu überprüfen, ob ein bestimmter Wert ist gleich wie beliebige Werte gespeichert, die in einem anderen array?" gelöst werden kann, ohne Schleife.
Verwenden Sie einfach die setdiff Funktion.
Ich denke, die INTERSECT-Funktion ist, was Sie suchen.
http://www.mathworks.de/de/help/matlab/ref/intersect.html
Die Frage
if i == 'Any value stored in criteriacheck
können auch auf diese Weise beantwortet, wenn man bedenkti
eine triviale matrix. Allerdings sind Sie proably besser mitany(i==criteriacheck)