Die Indizierung muss erscheinen, zuletzt in einem index-Ausdruck
Ich habe einen Vektor CD1
(120-by-1) und ich getrennte CD1
in 6 Teile. Für Beispiel, der erste Teil wird extrahiert von Zeile 1 bis Zeile 20 in CD1
, und der zweite Teil wird extrahiert, von Zeile 21 bis Zeile 40 in CD1, etc. Für jedes Teil, das ich brauche, um zu berechnen, die Mittel der absoluten Werte der zweite Differenzen der Daten.
for PartNo = 1:6
% extract data
Y(PartNo) = CD1(1 + 20*(PartNo-1):20*(PartNo),:);
% find the second difference
Z(PartNo) = Y(PartNo)(3:end) - Y(PartNo)(1:end-2);
% mean of absolute value
MEAN_ABS_2ND_DIFF_RESULT(PartNo) = mean(abs(Z));
end
Jedoch die oben genannten Befehle erzeugen den Fehler:
()-indexing must appear last in an index expression for Line:2
Irgendwelche Ideen, den code zu ändern, um es zu tun, was ich will?
- Nicht
Y(PartNo)
eine Skalare? Und die Rechte Seite ein Vektor? - RS ist der Vektor..
- Was ist also die Bedeutung von etwas zu schreiben wie:
Y(1) = [1 2 3]
? Und späterY(1)(3:end)
- Skalare Indizierung? - Warten Sie...ich fürchte, ich habe deine Frage missverstanden. Vergiss meine Antwort, gehen mit @dustincarr die Lösung in der Stelle 🙂
- Nur eine Allgemeine Bemerkung: whitespace ist FREI! Es gibt kein Papier zum speichern in einem computer-editor, und dichter code, macht es nicht schneller, also...es öffnen sich ein bisschen, es ist besser für die Augen 🙂
- Sie tatsächlich beantwortet die konkrete Frage viel besser als ich getan, da die Fragen speziell über die Fehlermeldung.
- Ah, aber es war nicht komplett zu das Ausmaß, dass die Fehlermeldung tritt auch auf, wenn dabei
a(2)(3)
mit einer gewöhnlichen matrix. Aber werde ich un-löschen Sie meine Frage, und sehen, was der OP meint. - Interessant zu wissen, dass Octave-Unterstützung für mehrere Indizierung.
x = 1:3
dannx(1:2)(2)
unterstützt wird
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dieser Fehler wird Häufig gefunden, wenn
Y
ist ein cell-array. Für cell-arrays,legal ist. Die geschweiften Klammern (
{}
) bedeuten Datenextraktion, so bedeutet dies, dass Sie extrahieren array gespeichert, die in der Lage 1 in die Zelle ein array, und dann auf die Elemente 1 bis 3 des Arrays.Die notation
unterschiedlich, dass es nicht zum extrahieren von Daten, aber es Referenzen die Zelle Lage 1. Dies bedeutet, dass der erste Teil (
Y(1)
) gibt einen Zelle-array, in Ihrem Fall ist, enthält ein einzelnes array. So dass Sie nicht haben einen direkten Zugang zu der regelmäßigen Anordnung wie vorher.Es ist eine infame Einschränkung in Matlab, dass Sie nicht indirekt oder Doppel-Referenzierung, die in der Wirkung dem, was Sie hier tun.
Daher der Fehler.
Nun zur Lösung: ich vermute, dass das ersetzen ein paar normale mit geschweiften Klammern wird den trick tun:
Könnte ich schlage vor, einen anderen Ansatz
Dies ist keine gültige Anweisung in matlab:
Sollten Sie entweder
Y
zwei-dimensional und verwenden Sie diese Indizierungoder extrahieren Vektor-Teile und verwenden Sie diese direkt, wenn Sie eine Schleife verwenden, wie Sie haben gezeigt,
Auch, da
CD1
ist ein Vektor, Sie brauchen nicht, um den index der zweiten dimension. Fallen die:
Schließlich brauchen Sie nicht eine Schleife. Sie können
reshape
dieCD1
- Vektor in ein zweidimensionales arrayY
Größe20x6
, in der die Spalten sind Ihre Teile, und die Arbeit direkt auf die resultierende matrix: