Matlab Alternative zu find

Neue Frage »

Matlab-User Auf diesen Beitrag antworten »
Matlab Alternative zu find
Hi,
ich möchte in einem Vektor L mit natürlichen Zahlen, die jew. mehrfach auftreten können, mir der Reihe nach alle Positionen der 1, 2, 3 usw. ausgeben lassen.
Ein Code der Form

for i=1:max(L)
X(i,smile =find(L==i);
end

gibt aber Fehlermeldung. Meine Frage: Wie kann ich für alle i die Ergebnisse in einer Matrix abspeichern?
Vielen Dank im Voraus,
Gruß,
Matlab-User
Matlab-User Auf diesen Beitrag antworten »

Sorry, der richtige Code lautet
code:
1:
for i=1:max(L) X(i,:)=find(L==i) end
.
Airblader Auf diesen Beitrag antworten »

Du hast das Problem, dass sich die Anzahl jedes Mal ändert. Die '1' kann zehnmal auftauchen, die '2' dann nur einmal. Eine Matrix mit zwei Zeilen und gleichzeitig 10 und 1 Spalte gibt es aber nicht.

Außerdem solltest du sichergehen, dass L wirklich ein Zeilenvektor ist, andernfalls scheitert dein Code auch daran. Zudem sollte man auf 'i' und 'j' in Matlab verzichten. Folgender Code funktioniert jedenfalls.

code:
1:
2:
3:
4:
5:
6:
7:
8:
L = [1 2 3 1 2 3]; % Beispielvektor

X = zeros(size(L));

for ii=1:max(L)
   ind = find(L == ii);
   X(ii, 1:size(ind,2)) = ind;
end


Überflüssige Spalteneinträge sind dann eben Null.

air
Matlab-User Auf diesen Beitrag antworten »

Hallo,
vielen Dank für Deine Antwort. Ja, das mit dem dimension mismatch ist genau mein Problem. Leider sagt er das bei Deinem Code aber immer noch (das war auch mein spontaner Einfall), und ich kann mir das grad nicht erklären, weil ich's logisch finde...
Gruß,
Matlab-User
Airblader Auf diesen Beitrag antworten »

Abgesehen davon, dass ich

code:
1:
X = zeros(size(L, 2));


meinte, da die Matrix sonst unnötig groß wird: Mein Code funktioniert (Matlab R2011b). Kopiere bitte meinen Code ganz exakt ins Command Window und führe ihn aus – wenn er noch immer einen Fehler nennt, dann bitte folgende Informationen nennen:

  • Welchen Fehler genau?
  • Welche Matlabversion nutzt du?


air
Matlab-User Auf diesen Beitrag antworten »

Oh sorry,
ich habe gerade gesehen, dass ich auch einen Tippfehler in meinem Code hatte (hatte die ganze Zeit die falsche Dimension genommen).
Ich habe mehrere Matlab-Versionen zur Verfügung, aber in R2011b funzt es jetzt, das reicht mir, herzlichen Dank nochmal,
Gruß,
Matlab-User.
 
 
Airblader Auf diesen Beitrag antworten »

Gern. Freude

air
Neue Frage »
Antworten »



Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »