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

if-Schleife Werte vergleichen mit unterschiedlicher länge

 

Ines Ebner
Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 09.04.20
Wohnort: Jena
Version: ---
     Beitrag Verfasst am: 23.04.2020, 11:52     Titel: if-Schleife Werte vergleichen mit unterschiedlicher länge
  Antworten mit Zitat      
Hallo ihr Lieben,

ich hab eine Frage.
Ich habe F =12x2
und Gait = 146x11
davon gibt es jeweils 97 Dateien aber das ist ja erstmal nebensächlich. Ich will jetzt von Gait die ersten beiden Spalten vergleichen mit den ersten beiden von F.

Um das verständlicher zu machen. In F steht ein Zeitraum bspw. 1999 3315 Start und Stop von einer geraden Strecke die 12 mal gelaufen wurde.
und in G stehen Start und Stop für jeden Doppelschritt inklusive Wenden.
Sieht dann so aus:
2027 2126
2126 2227
2227 2327
2327 2427
... bis 146 bsp.

Jetzt möchte ich das Wenden nicht haben und prüfen.
bisher habe ich nur das:

Code:

for nf= 1:length(Gait(:,2))-1
            if Gait(nf,1)>= F(:,1) && Gait(nf,2)<= F(:,2)
end
 


F(:,1) doppelpunkt ist sicher Falsch aber ich weiß nicht wie ich es prüfen kann. ich möchte das von Gait solange in Zeile 1 von F geprüft wird bis keine passenden mehr vorhanden sind. Danach die nächsten Zeilen im gleichen Schema. Und die die nicht passen nicht nehmen.


Könnt ihr mir helfen, ich weiß gerade nicht weiter.

Liebe Grüße,
Ines
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: 23.04.2020, 19:06     Titel:
  Antworten mit Zitat      
Hallo,

ich verstehe leider nicht, was gemacht werden soll. Vielleicht ein konkreteres Beispiel, vor allem inkl. erwartetem Ergebnis?

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Ines Ebner
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 09.04.20
Wohnort: Jena
Version: ---
     Beitrag Verfasst am: 26.04.2020, 12:17     Titel:
  Antworten mit Zitat      
Hallo,

ohja ich merke ich war da schon geistig zu lange am Computer.
ich bin jetzt erstmal pro Datei vorgegangen lässt sich vielleicht auch leichter erklären.

Also ich hab eine Datei 001-G-Frames und eine Datei 001-G. In den Frames stehen Start und Ende einer bestimmten Strecke, die unterschiedlich oft gegangen wurde. In der G Datei sind die Anzahl der benötigten Schritte zu finden. In den ersten beiden Spalten stehen da auch Start und Ende jedes einzelnen Schrittes so lässt es sich zuordnen welcher Schritt in welcher Strecke gegangen ist.

ich hab somit erstmal das gemacht:
Code:

f=readmatrix('/Users/inesebner/Computer/Matlab/CSV-Frames/001-G-Frames.csv');
g=readmatrix('/Users/inesebner/Computer/Matlab/CSV/001-G.csv');


for iframes=1:length(f(:,1))
    ind=[];
    for istrides=1:length(g(:,1))
        if  g(istrides,1)>= f(iframes,1) && g(istrides,2)<= f(iframes,2)
            ind=[ind,istrides];
        end
    end
Gaitneu=g(ind,:);

 %hier detrenden
 z_stat(ind,:)=Detrend(Gaitneu,lambda);
 %hier degetrendete daten abspeichern

 


Detrend ist eine Funktion die sieht so aus:

Code:

function [z_stat,z]  = Detrend(M,la)
        z=M(:,3);
        T= length(z);
        lambda =la;
        I= speye(T);
        D2= spdiags(ones(T-2,1)*[1 -2 1],[0:2],T-2,T);
        z_stat=(I-inv(I+lambda^2*D2'*D2))*z;
end
 


Die Funktion hab ich für ein anderes programm geschrieben, dort will ich die Datei(später auch mehrere) in abhängigkeit von den Frames (also Strecke für Strecke separat detrenden) aufrufen möchte.

Bin aber jetzt wirklich am limit meiner Fähigkeiten. Ich denke ich sollte das zuordnen der Strecken der DS ebenfalls in eine Funktion bauen die ich dann aufrufe in meinem bisherigen dafür gebauten m.file.
Ich hoffe es ist etwas deutlicher geworden. Finde es schwer das zu erklären.

Liebe Grüße,
Ines
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: 26.04.2020, 13:57     Titel:
  Antworten mit Zitat      
Hallo,

mir ist nicht klar, wo nun bei diesem Code oder seiner Ausführung das Problem liegt.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Ines Ebner
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 09.04.20
Wohnort: Jena
Version: ---
     Beitrag Verfasst am: 26.04.2020, 14:59     Titel:
  Antworten mit Zitat      
Hallo,

also das Problem ist noch das das gerade nur für 1 Frames -Datei und 1 dazugehörige Gait Datei funktioniert. Wenn ich das für eine Schleife mit mehreren Datein einbaue:

Code:

clear;
flistF = dir('/Users/inesebner/Computer/Matlab/CSV-Frames/*G-Frames.csv');
flistG = dir('/Users/inesebner/Computer/Matlab/CSV/*G.csv');

for i= 1:length(flistF)
    loadnameG = fullfile(flistG(i).folder, flistG(i).name);
    g= readmatrix(loadnameG);
    loadnamef = fullfile(flistF(i).folder, flistF(i).name);
    f= readmatrix(loadnamef);
   
    for iparam=3:length(g(1,:))
        gneu = rmmissing(g(:,[1,2,iparam]));
       
        for iframes=1:length(f(:,1))
            ind=[];
            for istrides=1:length(gneu(:,1))
                if  gneu(istrides,1)>= f(iframes,1) && gneu(istrides,2)<= f(iframes,2)
                    ind=[ind,istrides];
                end
            end
           
            lambda=5;
            Gaitneu=gneu(ind,:);
            %hier detrenden
            z_stat(iparam,:)=Detrend(Gaitneu,lambda);
            %hier degetrendete daten abspeichern
            gesammelt(i,iparam)=std(z_stat);
        end
    end
end
 


hab ich diese Fehlermeldung:
Code:

Unable to perform assignment because the indices on the left side are not compatible with the size of the right side.

Error in probeframes (line 27)
            gesammelt(i,iparam)=z_stat;
 



ich will auch dass über alle Spalten gedetrendet wird. Ohne die Frameszeiten (also die benötigte Zeit für eine Strecke) funktioniert das. Aber um es genauer darzustellen benötige die Detrending Daten, Strecke für Stecke.
Liebe Grüße,
Ines
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: 26.04.2020, 15:07     Titel:
  Antworten mit Zitat      
Hallo,

falls ich das beim letzten Mal noch nicht empfohlen habe:
aus der Vorgehensweise für das Verarbeiten einer Datei eine Funktion machen und diese dann in einer for-Schleife aufrufen.

Bei der Fehlermeldung kann ich dir nur raten, das zu tun, was ich tun würde: debuggen.

Übrigens: die Fehlermeldung stimmt nicht mit dem Code überein. Einmal ist ein Aufruf von std enthalten, einmal nicht. Das solltest du als erstes überprüfen.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
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 - 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.