Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Mittelwert aus 3-Dim-Array

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Mittelwert aus 3-Dim-Array

    Hallo,

    ich habe ein Problem zum Erstellen der richtigen Schleifen zum ermitteln eines Mittelwertes eines 3-Dim-Array.
    Und zwar habe ich zunächst zwei Arrays für x und y. jeder x-Wert gehört zu einem y-Wert.
    Dann habe ich sie verbunden in einem array.
    verschiedene Bereiche sollen nun den array aufteilen. von diesen Bereichen brauche den Mittelwert für x und y.

    Bisher sieht mein code so aus:

    PHP-Code:

      $ydata 
    = array(74,7,43,56,78,23,12,30,12,9,23,50,13,5,11);
      
    $xdata = array(11,3,3.4,3.6,4.3,4.6,4.1,8,12,32,1,14,13,9,7);
      
      
    $dataxy = array(
      
    'x' => $xdata,
      
    'y' => $ydata
      
    );
      
      for(
    $i=3$i<26$i++){
        
    $bereich[]= array(
            
    'u' => $i,
            
    'o' => $i+1
        
    );
      }
    $lookup = array();

    $indexe = array();
    for(
    $i=0$i<23$i++) {
        
        foreach(
    $dataxy['x'] as $index => $xValue){
            if(
    $xValue >= $bereich[$i]['u'] and $xValue $bereich[$i]['o']) {
                
    $lookup[$i][] = array(
                    
    'x' => $xValue,
                    
    'y' => $dataxy['y'][$index]
                    );
                    
            }
            
                
        }
         
        
    }

    for(
    $m=0$anzahl1 count($lookup[0]); $m<=($anzahl1-1); $m++){
        for(
    $n=0$anzahl2 count($lookup[$m]); $n<=($anzahl2-1); $n++){
            
    $median[] = $lookup[$m][$n];
        }

    ich komme einfach nicht weiter bei der doppelten for-schleife. Über Hilfe würde ich mich sehr freuen!

    Gruß,

    Tim

  • #2
    Von was genau willst du den Mittelwert?
    Allen Werten die in deinem Ausgangsarray zwischen position 3 und 26 stehen?

    Kommentar


    • #3
      die Mittelwerte von den x und y arrays innerhalb ihres bereiches.
      ein Bereich geht von zb von 3 bis <4; dann 4 bis <5...
      beim x-Array wäre es zum Beispiel der Mittelwert aus: 3, 3.4,3.6->3,333 für den ersten Bereich. der zugehörige y-Mittelwert wäre aus: 7,43,56->35,333

      Hoffe das ist so verständlicher...

      Kommentar


      • #4
        100% hab ichs zwar immer noch nicht verstanden, aber versuchs doch mal so.

        Du erstellst dir 4 Variablen, jeweils einen für die Anzahl und einen für den Wert pro Array.
        Du läufst deinnen Array mit einer Schleife durch (zu jedem x ein y Wert).
        Dann prüfst du dabei ob jeder einzelne Wert in deinem Bereich ist.
        Ist das der Fall, zählst du dessen Wert zur Werte-Variable des dazugehörigen Arrays (die du dir vorher definiert hast) dazu und erhöhst den entsprechenden Counter um eins.

        Bist du mit der Schleife fertig, teilst du einfach Werte-Variable/Counter = Mittelwert. (sofern du den Arithmetischen meinst).

        Kommentar


        • #5
          Für mich kein bisschen nachvollziehbar wie bestimmt wird, aus welchen Werten ein Mittelwert gebildet werden soll.Der letzten Schleife nach geh ich mal von Median aus? Da musst du doch eigentlich nur die Arrays sortiere und dann abzählen?
          [COLOR=#A9A9A9]Relax, you're doing fine.[/COLOR]
          [URL="http://php.net/"]RTFM[/URL] | [URL="http://php-de.github.io/"]php.de Wissenssammlung[/URL] | [URL="http://use-the-index-luke.com/de"]Datenbankindizes[/URL] | [URL="https://www.php.de/forum/webentwicklung/datenbanken/111631-bild-aus-datenbank-auslesen?p=1209079#post1209079"]Dateien in der DB?[/URL]

          Kommentar


          • #6
            Was soll den am Ende rauskommen? So wie ich das verstehen reicht doch eine Schleife.

            PHP-Code:
            for($i=0$i<23$i++) {
                
            $sum 0;
                
            $anzahl 0;
                foreach(
            $xdata AS $key => $value) {
                    if(
            $i >= $value && $i+$value) {
                        
            $sum += $value;
                        
            $anzahl++;
                    }
                }
                    
                
            $mittelwert $anzahl?$sum/$anzahl:0;
                ...

            Kommentar


            • #7
              Wie man evtl an der anzahl meiner beiträge sehen kann, bin ich kein profi in php...
              deswegen kann man den code wahrscheinlich deutlich kürzer formulieren.

              Aber was ich mir dachte ist folgendes:
              1. werden die Bereiche aufgestellt:
              PHP-Code:
               for($i=3$i<26$i++){
                  
              $bereich[]= array(
                      
              'u' => $i,
                      
              'o' => $i+1
                  
              );
                } 
              2. eine Schleife geht die bereiche durch und guckt welche x-Werte im ersten bereich, dann im zweiten Bereich ... sind. zusätzlich sind dort auch die zugehörigen y-Werte
              PHP-Code:
              for($i=0$i<23$i++) {
                  
                  foreach(
              $dataxy['x'] as $index => $xValue){
                      if(
              $xValue >= $bereich[$i]['u'] and $xValue $bereich[$i]['o']) {
                          
              $lookup[$i][] = array(
                              
              'x' => $xValue,
                              
              'y' => $dataxy['y'][$index]
                              );        
                      }        
                  }    

              3. die x,y-Werte aus dem ersten Bereich arithmieren (mittelwert bilden) , dann den zweiten Bereich für x-y werte...

              Und genau beim dritten schritt liegt mein problem. komme einfach noch nicht so gut mit den schleifen for/foreach zurecht...

              Kommentar


              • #8
                So?
                PHP-Code:
                $ydata = array(74,7,43,56,78,23,12,30,12,9,23,50,13,5,11);
                $xdata = array(11,3,3.4,3.6,4.3,4.6,4.1,8,12,32,1,14,13,9,7);
                  
                $dataxy = array(
                  
                'x' => $xdata,
                  
                'y' => $ydata
                );

                $res = array('x' => array(), 'y' => array());
                  
                for(
                $i=3$i<26$i++){
                  
                $sumx $sumy 0.0;
                  
                $count 0;
                  foreach(
                $dataxy['x'] as $key => $x){
                    if(
                $x >= $i && $x < ($i+1)) {
                      
                $sumx += $x;
                      
                $sumy += $dataxy['y'][$key];
                      ++
                $count;  
                    }
                  }
                  if(
                $count) {
                    
                $res['x'][] = $sumx/$count;
                    
                $res['y'][] = $sumy/$count;
                  }
                }

                //
                var_dump($res); 

                Kommentar


                • #9
                  Vielen Dank! Genau so sollte es aussehen. werde dann mal mein glück daran versuchen...

                  Kommentar

                  Lädt...
                  X