Ich habe eine Matrix, die in einer .mat
Datei gespeichert wurde, und wurde dann in Matlab über die Funktion neu geladen. Ich habe auch einen logischen Index, wie logische ([1 0 1 0]), dass ich auf das geladene Matrix anwenden möchten:Logische Indizierung fehlgeschlagen, wenn Matrix von Matfile geladen wird
results = matfile('results.mat');
% id is my logical vector of the appropriate size
% IV is a matrix stored in results.mat
newIV = results.IV(:,id);
aber ich laufe in ein Problem und immer diese Fehlermeldung:
'IV' cannot be indexed with class 'logical'. Indices must be numeric.
Ich verstehe nicht, was dieses Problem verursacht. Ich habe den gleichen Code zuvor verwendet und es funktionierte, das einzige war, dass ich die Struct-Ergebnisse vorher nicht laden musste, ich hatte es bereits im Speicher. Es wird seltsamer; dies funktioniert:
IV = results.IV;
newIV = IV(:,id); % this works somehow
Dies funktioniert auch:
results_raw = matfile('results.mat');
results = struct('IV',results_raw.IV);
newIV = IV(:,id); % this also works!!! why matlab, why???
Ich habe auch versucht die results.mat
Datei resaving die -v7.3
Flag verwendet, aber es hat das Problem nicht lösen. Das Problem scheint mit dem Laden der .mat
Datei zu sein, weil ich eine Struktur mit einer Matrix erstellt und logische Indexierung verwendet habe, und es hat gut funktioniert.
Frage: Warum funktioniert die Indizierung, wenn ich results.IV
an IV
übergebe? Wie kann ich es mit results.IV
arbeiten lassen?
Danke für Ihre Hilfe !!! : D
scheint, Sie können nicht, wie andere Einschränkungen, wie sie in der 'matfile' Seite explizit dokumentiert: https://www.mathworks.com/help/matlab/ref/matfile.html#bt2ft8s-6 Wenn Sie Weisen Sie die Daten einer anderen Variablen zu, sie hat einen neuen Datentyp und alle Daten im Arbeitsbereich haben nichts mit 'matfile' zu tun. – Adiel