WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

"Attempt to reference field of non-structure array.&quo

 

xedosh
Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 16.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.01.2011, 12:09     Titel: "Attempt to reference field of non-structure array.&quo
  Antworten mit Zitat      
Hallo liebe Leute,

vorab habe ich in einem Schritt mehrere mat-Files mit jeweils zwei Dateien edge_det und edge_crit angelegt. Das sind beides Variablen der Gestalt 121x202 x n (hier n=50). Und Aufrufen dieser mat-Files läuft auch ohne Probleme. Soweit so gut.

Nun habe ich folgendes Programm geschrieben (der Übersicht halber habe ich die Kommentare entfernt):

Code:

function [index,distvec,vert] = kNNcalc(class,method,quantile,kval)

file = ['cls' num2str(class) '_meth' num2str(method) ...
          '_q' num2str(100*quantile)];
load(['Dataset_ED_EC','/',file],'edge_det');

numOfImg = size(edge_det,3);

index = cell(numOfImg,1);
distvec = cell(numOfImg,1);
vert = cell(numOfImg,1);

for t=1:numOfImg

pic = edge_det(:,:,t);

[m,n]=size(pic);

numOfOnes = sum(sum(pic));
vt = zeros(numOfOnes,2);

p=1; % Counting variable
for k=1:m
    for j=1:n
        if pic(k,j) == 1
            vt(p,1) = j; vt(p,2) = m-k;
            p = p + 1;
        else
            continue;
        end
    end
end

[IDX,distv] = knnsearch(vt,vt,'k',kval+1);

% Save all files
index{t} = IDX;
distvec{t} = distv;
vert{t} = vt;

end

end
 


Wie man sieht möchte ich gerne 3 (und in einer anderen Version eigentlich auch 4) cell-Arrays der Größe n x 1 (n=50) abspeichern. Das aber sollte kein Problem darstellen.

Und nun wollte ich nichts anderes machen als ein m-File mit folgendem Inhalt laufen zu lassen:
Code:

disp('Start');

k = 1;
str = num2str(k);

for class = 2%0:4
   for meth = 1%:4
      for quant = 0.6%:0.05:0.95
         [index,distvec,vert] = kNNcalc(class,meth,quant,k);
         if (isdir(str)) % ... folder exists
            cd(str)
         elseif (~isdir(str)) % ... folder does not exist
            mkdir(str);
            cd(str)
         end
         name = ['cls',num2str(class),'_meth',num2str(meth),'_q',num2str(quant*100),'_k',num2str(k),'.mat'];
         save(name,'index','distvec','vert');%,'-v7.3');
         %clear('edge_det');
         cd('../')
      end
   end
end

disp('End. Now exiting.');
 


Dann erhalte ich aber leider folgende Fehlermeldung, aus der ich auch nach Recherche im Internet nicht schlauer wurde.

Code:

Start
End. Now exiting.
Warning: Direct access of structure fields returned by a function call (e.g.,
 call to script_k1) is not allowed. See MATLAB 7.10 Release Notes, "Subscripting Into Function Return Values" for details.
??? Attempt to reference field of non-structure array.
 


Ich bin auf das Problem gestoßen, weil ich auf diese Art auf einem anderen Rechner eben die gewollten mat-Files abgespeichert habe, sie aber leider nicht öffnen kann ("Unable to read..."). Insofern vermute ich den Fehler in der Fehlermeldung, um die es hier geht.

Ich wäre für Hilfe sehr sehr dankbar!
Schon jetzt auch vielen Dank!

Mit besten Grüßen,
Andreas
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 26.01.2011, 23:19     Titel: Re: "Attempt to reference field of non-structure array.
  Antworten mit Zitat      
Hallo xedosh,

Kannst Du bitte noch posten, in welcher Zeile die Warnung auftritt? Erraten kann ich das zumindest nicht.
Wenn Du die entsprechende Zeile nicht angezeigt bekommst, versuche:
Code:


Wenn ich aber mal frei rate:
Code:

load(['Dataset_ED_EC','/',file],'edge_det');
 

Kann es sein, dass hier eine Variable direkt in den Workspace geladen wird, oder eben auch nicht, so dass Du später aus Versehen einen Index auf einen Funktionsaufruf anwendest?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.