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

Assignment has more non-singleton rhs dimensions than non-si

 

Ghost87
Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 21.07.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.08.2017, 16:22     Titel: Assignment has more non-singleton rhs dimensions than non-si
  Antworten mit Zitat      
Hallo liebes Forum,

habe folgenden Fehler bei mir bekommen und weiß nicht wirklich was damit anfangen.

Code:

% Überprüfung der Cells:

len=length(Zeitfenster(1,:));
Auslastung=zeros(1,len);
for i=1:len
    %case länger als ein Tag
    if ~isempty(Zeitfenster{2,i})&&isempty(Zeitfenster{3,i})
        pos=find(cellfun(@(x) ~isempty(x),Zeitfenster(3,i:end)),1,'first');
        pos=pos+i-1;
        Auslastung(1,i:pos)=100;
        i=pos;
        x=num2cell(Auslastung)
        Zeitfenster(4,:) = x
    end

   
    % Berechnung der Differenz der Loginzeit pro Tag
    logInIndex = Zeitfenster{2,i};
    logOutIndex = Zeitfenster{3,i};
    logIn = WorkLog(logInIndex,1);
    logOut = WorkLog(logOutIndex,2);
    AnzLogIn = length(logInIndex);
    AnzLogOut = length(logOutIndex);
    form = 'yyyy-mm-ddTHH:MM:SS';
    % case Login + Logoff am selben Tag
    if ~isempty(Zeitfenster{2,i})&&~isempty(Zeitfenster{3,i})
        % Kein Login über Nacht
        if length(Zeitfenster{3,i})==length(Zeitfenster{2,i})
           
            diffZ = arrayfun(@(logIn,logOut) (datenum(logOut, form)-datenum(logIn, form)), logIn,logOut);
            addZ = datenum([datestr(datenum(logIn(1,1),'yyyy-mm-dd'),'yyyy-mm-dd') 'T24:00:00.000+0200'], form)-datenum(logIn(1,1),form);
            logZeit=sum(diffZ)+addZ;          
            AuslastungG(1,i)=logZeit/1*100;
            Y=num2cell(round(AuslastungG))
            Zeitfenster(4,i)= Y
         
        end
       
        % Login über Nacht
        if AnzLogIn>AnzLogOut
           
            diffZIN = arrayfun(@(logIn,logOut) (datenum(logOut, form)-datenum(logIn, form)), logIn(2:end),logOut);
            addZIN = datenum([datestr(datenum(logIn(1,1),'yyyy-mm-dd'),'yyyy-mm-dd') 'T24:00:00.000+0200'], form)-datenum(logIn(1,1),form);
            ONZeit=sum(diffZIN)+addZIN;
            AuslastungI(1,i)=ONZeit/1*100;
            z=num2cell(round(AuslastungI))          
            Zeitfenster(4,i)=z
           
        else if AnzLogIn<AnzLogOut
               
                diffZOUT = arrayfun(@(logIn,logOut) (datenum(logOut, form)-datenum(logIn, form)), logIn,logOut(1:end-1));
                addZOut = datenum(logOut(1,end),form)- datenum([datestr(datenum(logOut(1,1),'yyyy-mm-dd'),'yyyy-mm-dd') 'T00:00:00.000+0200'], form);
                OFFZeit=sum(diffZOUT)+addZOut;
                AuslastungO(1,i)=OFFZeit/1*100;
                o=num2cell(round(AuslastungO));            
                Zeitfenster(4,i)=o;
                 
            end
        end
    end
end
 


Der Fehler tritt bei dieser Zeile zum ersten Mal auf:
Code:

 diffZ = arrayfun(@(logIn,logOut) (datenum(logOut, form)-datenum(logIn, form)), logIn,logOut);
            addZ = datenum([datestr(datenum(logIn(1,1),'yyyy-mm-dd'),'yyyy-mm-dd') 'T24:00:00.000+0200'], form)-datenum(logIn(1,1),form);
            logZeit=sum(diffZ)+addZ;          
            AuslastungG(1,i)=logZeit/1*100;
            Y=num2cell(round(AuslastungG))
            Zeitfenster(4,i)= Y
 



Genau bei Zeitfenster(4,i)=Y gibt er mir den Fehler raus, obwohl davor alles ok ist und auch klappt, dieser Fehler zieht sich dann auch in den überigen Zeilen fort.

Ich habe im Datensatz ein paar Daten von Tagen die ich davor eingereiht habe und das ganze auf einen Monat berechne.

Ich hoffe es ist in einer gewissen Weise verständlich und hoffe es kann mir hier einer helfen, mein Problem zu lösen.

LG
Ghost
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 01.08.2017, 16:40     Titel:
  Antworten mit Zitat      
Hallo,

"irgendetwas" ist bei 4 wohl anders als vorher. Was, kann ich dir so auch nicht sagen.

Du kannst dir da nur die Dimensionen der beteiligten Variablen ansehen, im Zweifelsfall mit Hilfe des Debuggers. Das sollte zumindest das Problem erklären und vielleicht auch schon die Lösung.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Ghost87
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 21.07.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.08.2017, 11:10     Titel:
  Antworten mit Zitat      
Hallo,

also auch mit dem Debugger werde ich nicht schlauer:

also das erste mal tritt bei mir das Prob bei i=19 auf da sind halt Werte hinterlegt und da kommt er auch in die if-Bedingung rein:

Code:

if length(Zeitfenster{3,i})==length(Zeitfenster{2,i})
 


Danach gibt er mir in der Zeile:

Code:

Zeitfenster(4,i)= Y;
 


diesen Fehler aus: Assignment has more non-singleton rhs dimensions than non-singleton subscripts

Ich versteh halt nicht ganz wo da der Fehler bei mir liegen könnte.

LG
Ghost
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 02.08.2017, 11:17     Titel:
  Antworten mit Zitat      
Hallo,

und was ist Y vor dieser Zeile? Das ist doch der entscheidende Punkt.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Ghost87
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 21.07.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.08.2017, 11:29     Titel:
  Antworten mit Zitat      
Y trägt ja nur den Wert ein, in dem Fall der Wert 66. Dieser Wert spiegelt meine prozentuelle Belastung wieder für den Tag quasi.


Diesen Wert trägt er halt, da i = 19 ist in die 19 Spalte bei dem Cell Zeitfenster in die 4te- Zeile ein.

und genau da kommt auch schon bei mir der Fehler, den ich nicht so ganz verstehe.

LG
Ghost
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 02.08.2017, 11:46     Titel:
  Antworten mit Zitat      
Hallo,

kann eigentlich nicht sein.
Ich fürchte, dass wir ohne ein reproduzierbares Beispiel (lauffähiger Code + Daten) nicht weiterkommen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Ghost87
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 21.07.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.08.2017, 11:49     Titel:
  Antworten mit Zitat      
Hier,

laut Command Window:

Y =

[0] [0] [0] [0] [0] [0] [0] [0] [0] [0] [0] [0] [0] [0] [0] [0] [0] [0] [66]

Assignment has more non-singleton rhs dimensions than non-singleton subscripts

Das ist ja alles richtig hier aber er trägt es halt nicht ab, weil der Fehler dort kommt.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 02.08.2017, 12:58     Titel:
  Antworten mit Zitat      
Hallo,

nun kann ich immer noch nur raten, was der Datentyp von Y ist.
Falls es ein Cell Array ist, solltest du { } statt ( ) verwenden.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Ghost87
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 21.07.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.08.2017, 13:37     Titel:
  Antworten mit Zitat      
Ok, er rechnet jetzt durch jedoch ist der Eintrag im Cell dann komisch und das wollte ich verhindern, er tägt mir in das Zeitfenster dann nicht mehr den Wert ein, sondern die Größe, in dem Fall 1x26 cell.

Aus diesem Grund habe ich auch normal Klammern benutzt.


Versteh auch immer noch nicht ganz genau was es mit geschweiften Klammern bei Arrays und normalen Klammern auf sich hat.

Aber der Fehler taucht schonmal nicht mehr auf. Der Compiler hat durchgerechnet:

Y =

Columns 1 through 19

[0] [0] [0] [0] [0] [0] [0] [0] [0] [0] [0] [0] [0] [0] [0] [0] [0] [0] [66]

Columns 20 through 30

[54] [0] [0] [0] [0] [0] [28] [0] [34] [59] [86]

Dafür schonmal ein großes Danke und ne Erklärung wäre mir sehr hilfreich, weil ich nicht genau verstehe warum hierbei der Fehler nicht mehr auftaucht.

Danke im Voraus

LG
Ghost
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 02.08.2017, 15:01     Titel:
  Antworten mit Zitat      
Hallo,

bei Cell Arrays extrahiert man mit ( ) die Zelle, mit { } deren Inhalt.
https://www.mathworks.com/help/matl.....data-in-a-cell-array.html

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Ghost87
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 21.07.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.08.2017, 16:18     Titel:
  Antworten mit Zitat      
Danke dir, es löst halt mein Problem nur teilweise da ich ja quasi du den Inhalt dort extrahiere und somit mir als Wert der Cell reingeschrieben wird. Ich brauche aber dort Werte.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 02.08.2017, 16:21     Titel:
  Antworten mit Zitat      
Hallo,

die Aussage verstehe ich nicht.
Ein kleines, reproduzierbares Beispiel wäre hilfreich.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Ghost87
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 21.07.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.08.2017, 17:20     Titel:
  Antworten mit Zitat      
Das wird im Endeffekt in meine Variable Zeitfenster reingeschrieben:

8 [] [] [] [] 7 [] [5;6] [2;3;4] 1
[] 8 [] [] [] 7 [] [5;6] [2;3;4] 1
100 100 0 0 0 1x26 cell 0 1x28 cell 1x29 cell 1x30 cell


da habe ich halt normale Einträge und Einträge die mit den geschweiften Klammern gemacht wurden sind diese 1x26 cell usw.

Da steht erst dann ein Wert drinn, wenn man auf diese raufgeht.


LG Ghost
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 02.08.2017, 17:42     Titel:
  Antworten mit Zitat      
Hallo,

bitte stelle die Informationen so zur Verfügung, dass ich auch etwas damit machen kann, d.h. die Daten als .mat-Datei (muss gezippt werden), denn durch die Command Window-Ansicht ist nicht klar, wie das Ding erstellt wurde.

Wenn es nicht um Zeitfenster(4,i)= Y; geht, dann bitte auch den passenden Code.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Ghost87
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 21.07.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.08.2017, 18:09     Titel:
  Antworten mit Zitat      
So hab anbei die Dateien hinzugefügt, sprich den Datensatz und den kompletten Quelcode.

Danke im Voraus.

LG
Ghost

Benutzerzugriff.m
 Beschreibung:

Download
 Dateiname:  Benutzerzugriff.m
 Dateigröße:  4.29 KB
 Heruntergeladen:  277 mal
WorkLog_new.mat
 Beschreibung:

Download
 Dateiname:  WorkLog_new.mat
 Dateigröße:  5.27 KB
 Heruntergeladen:  264 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

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 - 2024 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.