ich habe 2 Rückgaben aus einem mex-file.
Ein Skalar und einen Array. Werden jeweils in
verschiedene Matritzen eingetragen.
Es kann sein, dass [] also Empty MAtrix zurückgegeben wird.
Wie kann ich das in eine 2D-MAtrix eintragen?
Die Indizierung ist nicht das Problem, sondern an
der jeweiligen Stelle soll einfach nichts stehen!
z.B.:
a=[ 1 2 3;
1 [] 8];
Was ja leider nicht geht. Null ist verboten!
da eine numerische Matrix immer quadratisch sein muss, sind leere Felder nicht erlaubt. Entweder du fuellst die Felder mit NaN (falls dies in deinem Fall erlaubt ist) oder du musst auf Cell-Arrays zurueckgreifen.
Ich versuch schon das mit cells umzusetzen...
bisher mit mässigem Erfolg. Hier das wichtigste
Code:
intensitaet=num2cell(zeros(arraylaenge,length(min(Theta):thetastep:max(Theta)),strahlen));% Traceval=zeros: Vorbelegung mit Nullen für Speicherplatzreservierung
zeitverzoegerung=num2cell(zeros(1,length(min(Theta):thetastep:max(Theta)),strahlen));
??? koorBrech.c erzeugt nur 2 Rückgabeparameter. (Selbst als Fehlermeldung definiert)
Zeitverzögerung ist das Skalar und die Ausgabe wäre []
intensitaet ist das Array Emptymatrix 0-arraylange
Matlab sagt mir also, dass angeblich zu viele Parameter asugegeben werden sollen. Stimmt aber nicht. Lass ich es ohne Index ausgeben passt alles, wird aber immer wieder überschieben... WO liegt der Fehler?
kann ich dir leider (ohne Minimalbeispiel) auch nicht helfen, da ich selber noch nicht mit mex-files gearbeitet habe. Hasst du aber mal probiert die geschweiften Klammern durch Runde zu ersetzen?
b=zeros(3,3,3);
b(1:3,3,3)=[123]
b(:,:,1) =
000 000 000
b(:,:,2) =
000 000 000
b(:,:,3) =
001 002 003
Das geht aber nicht:
a=cell(3,3,3)
a(:,:,1) =
[][][] [][][] [][][]
a(:,:,2) =
[][][] [][][] [][][]
a(:,:,3) =
[][][] [][][] [][][]
a{3,3,1:3}=[434]
??? The right hand side of this assignment has too few values to satisfy
the left hand side.
Ne im Ernst, fuer die Belegung in die Cell musst du die Daten auch erst in eine Cell umwandeln. Fuer dein Beispiel wuerde dies so aussehen (deswegen auch die Frage nach der Klammerart):
Kannst du dies auf deinen Code irgendwie anwenden?
Edit (dein Post kam eher): also wenn du jedes einzelne Matrixelement in eine einzelne Zelle packen willst brauchst du eigentlich num2cell, mit mat2cell kannst du eine Komplette Matrix in eine Zelle einfuegen, es ist also immer noch ein numerischer Array in der Zelle, was ja mit den leeren Werten nicht geht? Oder sehe ich das falsch?
Aber anscheinend werden auch leere Matritzen an das mex-file geleifert und dieses stürtzt ab. Fehlermeldung gibts keine, weils viel zu schnell abschmiert.
Ich denke es liegt an der Abfrag: if ~isempty(skalarr), die nicht geeignet ist um den AUfruf gar nicht zu starten und leere Skalare weitergibt?
hierbei hilf immer der Debugging Mode, geh Zeile fuer Zeile durch schaue dir die erstellten Werte an bzw. schau dir die Werte an die du deiner MEX-File uebergibst (dann sieht du ob leere Elemente verbleiben). Dies koenntest du z.B. so machen (diese Zeile vor MexFile packen, wenn leere Elemente enthalten sind springt er in If clause):
Moechtets du wirklich in jedem Schleifendurchlauf abfragen ob der gesamte Array Leer ist, oder nur ob das entsprechende Feld (Index) leer ist? Also so:
Ich debbuge es ja auch schrittweise, daher weiss ich, dass bei dem Code den ich vorher geposted habe auch [] weitergegeben wurde:
z.B. NEIN will ich nicht, habe jeden Eintrag der cell wieder als Mat übertragen und dann abgefragt, ob das Skalar leer ist, falls so, dann soll es eine Iteration auslassen... das läuft jetzt schon 5-6 min(und ist noch nicht zuende), vorher brauchte es etwa 30 sek...
Ich muss das irgendwie anders bewerkstelligen.
ANY HINTS?
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.