Ankündigung

Einklappen
Keine Ankündigung bisher.

Help - Need MATLAB experten

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Help - Need MATLAB experten

    Hab eine bestimmte Idee weiss aber nicht wie umsetzen. Und zwar:

    Ich suche in einer Menge A bspw. alle Werte > 5 mit.

    indices=find(A>5)

    Dann ist obviously A(indices)=5. Jetzt möchte ich aber alle Indices die NICHT 5 sind weiter durchsuchen ohne nochmal "find" anzuwenden auf die Menge A.
    Also quasi:

    A(NICHTindices)=! 5.

    Ich weiss aber nicht wie ich die "NICHTINDICES" aus den "INDICES" berechne. (setdiff) hat zu lange gedauert.
    Kennt jmd einen Ausweg? pls is wichtig

    #2
    Hallo,

    erstmal rate ich dir, nicht find() zu benutzen. Ich hatte damit bisher auch Laufzeitprobleme.

    Wenn ich dich richtig verstehe willst du sowas hier:
    I = A > 5;
    A(I)
    A(~I)
    Meintest du das?

    /edit: Ich verstehe nicht, was du mit
    Dann ist obviously A(indices)=5.
    meinst.

    Kommentar


      #3
      falls du mal nen methlab experten brauchst, perdita ist dein mann

      Kommentar


        #4
        Zitat von hannes
        Hallo,

        erstmal rate ich dir, nicht find() zu benutzen. Ich hatte damit bisher auch Laufzeitprobleme.

        Wenn ich dich richtig verstehe willst du sowas hier:
        I = A > 5;
        A(I)
        A(~I)
        Meintest du das?

        /edit: Ich verstehe nicht, was du mit
        Dann ist obviously A(indices)=5.
        meinst.

        Ich meinte es fast so. Ich möchte aber keine logischen Operatoren sondern die Location in Form von Indices:

        Input: A=[100 200 300; 400 500, 1000; -150000, -300000 -2]
        - B=[3 3 3; 2 2 2; -1e9 -1e8 -1]


        - First Step: A(indices)=find(A= 2]
        - A(indices)=[100 200 300; 400 500; 1000]
        - A(~indices)=[-150000, -300000, -2]
        - B(~indices)=[-1e9 -1e8 -1]



        - Second Step:

        - indices_2=find(B(~indices)>-130000)
        - A(~indices(indices_2))=[desired value]

        und dann die matrix a füllen :D

        Kommentar


          #5
          Hatte bishr keine Probleme mit find. Sit doch eine der zentralen Funktionen in MATLAB.

          Was hindert dich dran, zweimal find zu benutzen?

          /e was auch immer du mit "und dann die matrix a füllen :D" meinst

          Kommentar


            #6
            wie ich matlab gehasst habe. musste damit während meiner diplomarbeit arbeiten.

            kann dir leider nicht helfen, spreche dir hiermit aber mein mitgefühl aus. und sorry wegen ot.

            Kommentar


              #7
              MATLAB/Simulink beschde wo gibt Junge
              #wasdalosbeidemso4p

              Kommentar


                #8
                stimmt, simulink war da ja auch noch. :D
                da werden erinnerungen wach.

                haben ja echt ihren nutzen und sind auch extrem umfangreich, aber bin damit einfach nie warm geworden.

                Kommentar


                  #9
                  Du kannst es theoretisch auch über ne for-Schleife lösen mit if-Abfrage jedes Elements. Würde aber mal bezweifeln, dass das schneller geht.

                  [x y] = size(A)
                  for i=1:x
                  for j=1:y
                  if A(i,j) < 20000 && B(i,j) >= 2
                  ...

                  Hast dann über i und j den zeilen und Spaltenindex, sodass du mit A(i,j) deinen Wert nachher abgreifen kannst. Brauchst du alle Indizes oder interessiert dich nur das Ergebnis. Hab Matlab zur Zeit leider nicht aufm Rechner, sonst hätte ich es mal ausprobiert.

                  Kommentar


                    #10
                    boah junge bitte nicht mit geschachtelten for-Schleifen arbeiten um Matritzen in Matlab (MATrix LABoratory) zu durchsuche....

                    Hatte mal ne Studienarbeit nes Vorgängers in der Hand, dessen coolen Bildanalyse man auf 5 Zeilen runterdampfen konnte + die Berechnugnsdauer von 10 Minuten / BIld auf n paar Sek. zu reduzieren

                    Kommentar


                      #11
                      Ja natürlich ist das nicht elegant. Ich versteh ja auch nicht warum er nicht mit find arbeiten will.

                      Kommentar


                        #12
                        Zitat von shaxx
                        Zitat von hannes
                        Hallo,

                        erstmal rate ich dir, nicht find() zu benutzen. Ich hatte damit bisher auch Laufzeitprobleme.

                        Wenn ich dich richtig verstehe willst du sowas hier:
                        I = A > 5;
                        A(I)
                        A(~I)
                        Meintest du das?

                        /edit: Ich verstehe nicht, was du mit
                        Dann ist obviously A(indices)=5.
                        meinst.

                        Ich meinte es fast so. Ich möchte aber keine logischen Operatoren sondern die Location in Form von Indices:

                        Input: A=[100 200 300; 400 500, 1000; -150000, -300000 -2]
                        - B=[3 3 3; 2 2 2; -1e9 -1e8 -1]


                        - First Step: A(indices)=find(A= 2]
                        - A(indices)=[100 200 300; 400 500; 1000]
                        - A(~indices)=[-150000, -300000, -2]
                        - B(~indices)=[-1e9 -1e8 -1]



                        - Second Step:

                        - indices_2=find(B(~indices)>-130000)
                        - A(~indices(indices_2))=[desired value]

                        und dann die matrix a füllen :D
                        Benötigst du die Zwischenergebnisse des ersten Schritts denn überhaupt? Warum machst du nicht gleich
                        find(~(A < 20000 & B >= 2) & B > -130000) ?

                        /edit: Ich kann die Zitatfunktion nicht richtig verwenden.

                        Kommentar


                          #13
                          ich weise auch den zwischenergebnissen werte zu, da diese auch wichtig sind.

                          Zum Thema wieso nicht find(). Ich muss 100 steps ne 400x400 matrix durchsuchen. deshalb will ich nur einmal pro step find() auf die 400x400 anwenden um rechenzeit zu sparen. Nicht find( a >0) und find (a 0. :(

                          Kommentar


                            #14
                            Okay, ich verstehe.

                            Nur mal so ein Überlegung:
                            Wenn du die logischen Werte (I = A > 0;) hast, dann auch die Indizes (J = 1:numel(I); J = J(I);). Zumindest ist deren Berechnung nicht teuer.
                            Außerdem kannst du aus I ~I berechnen, und damit wiederum K = 1:numel(I); K = K(~I);. Also auch recht billig. Jetzt hast du aber A(K)

                            Kommentar


                              #15
                              das mit dem ==0 benötige ich nicht.. Das mit den indizes und einem find sparen stimmt und kann mir weiterhelfen! werde mal testen wie die performancesteigerung ist dadurch. hast pn.

                              Kommentar

                              Lädt...
                              X