Durchschnittswert eines Arrays

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

  • Durchschnittswert eines Arrays

    Hallo Leute,

    erst mal nen Frohes neues Jahr.

    Ich möchte zwei Arrays addieren und den Durchschnitt in einen neuen Array ablegen:

    PHP-Code:
    <?  
    $a = array(1,2,3); // Array A  
    $b = array(4,5,6); // Array B  
    $e = array(); // Ergebnis-Array 

    $a = array_pad ($a, max(count ($a),count ($b)),0); // Array A und B 
    $b = array_pad ($b, max(count ($a),count ($b)),0); // gleich lang machen    

    for ($i=0; $i<(count ($a)) ; $i++)  
    {  
    $c = $c + ($a[$i]+$b[$i]);  
    $d = $c /($i+1);  
    array_push ($e, $d); // Array e füllen  
    }  
    print_r($e);  // Array e ausgeben
    ?>
    Nun wollte ich fragen ob das vielleicht auch einfacher geht oder ob es vielleicht eine Funktion dafür gibt.

    Mit freundlichen Grüßen

    Thoma

  • #2
    den durchschnitt bekommste mit array_sum() und count() schon mal einfacher.
    Beantworte nie Threads mit mehr als 15 followups...
    Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

    Kommentar


    • #3
      Ich will nicht den Durchschnitt des ganzen Arrays, sondern immer den der vorangegangenen Werte.

      Im Beispiel wäre das dann:
      $a = array(1,2,3);
      $b = array(4,5,6);

      $e = array(5,6,7);


      Es kann aber auch vorkommen, das die Arrays A und B unterschiedlich viele Werte haben.

      Beispiel:
      $a = array(3,2,4,4);
      $b = array(4,5,6);

      $e = array(7,7,8,7);

      Kommentar


      • #4
        dann nimm doch Deine funktionalität,
        warum allerdings der Durchschnitt von 4,1 = 5 sein soll das weisst nur Du?
        Beantworte nie Threads mit mehr als 15 followups...
        Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

        Kommentar


        • #5
          _
          Zuletzt geändert von Thoma; 01.01.2006, 21:55.

          Kommentar


          • #6
            Wie ich oben bereits schrieb, werden der beiden Arrays zunächst addiert (1+4=5).
            Ich dachte, es gäbe vielleicht etwas einfacheres, sowohl um in zwei Arrays das jeweils n-te Element zu addieren, wie auch einen laufenden Durchschnitt zu bilden.

            Kommentar


            • #7
              hab ich jetzt auch nicht verstanden, was du möchtest.

              arrays sind mengen, und eine addition ist in dem sinne nicht das gleiche, wie eine vereinigung. was jetzt "vorangegangene" werte sind ist mir ebenso unklar wie das, was du berechnest und was $a, $b und $e sein soll.

              Kommentar


              • #8
                Mir ist egal, was du vorhast. Ich sehe, was bei obigem Code rauskommt und dass dein error_reporting keine Notices ausgibt - sonst gäbe es "undefined variable c".

                Also klappt auch dies hier:
                PHP-Code:
                $a = array(1,2,3);
                $b = array(4,5,6);

                for (
                $i=0$max=max(count($a),count($b)); $i<$max$i++) {
                    
                $e[]=($sum=($a[$i]+$b[$i])+$sum)/($i+1);
                }

                print_r($e); 
                Macht genau das selbe, nutzt lediglich ein paar Features der Sprache. Unschön, aber kurz.

                Kommentar


                • #9
                  Dachte der Quelltext würde sich mehr oder weniger selbst erklären.

                  $a und $b sind Arrays mit beliebigen ganzzahligen Werten, die Werte mit dem selben Index sollen jeweils addiert werden.

                  also:

                  $c[0] = $a[0]+$b[0];
                  $c[1] = $a[1]+$b[1];
                  $c[2] = $a[2]+$b[2];
                  ...

                  in $e steht der Durchschnitt.

                  also

                  $e[0] = (1+4)/1 = 5
                  $e[1] = (1+4+2+5)/2 = 6
                  $e[2] = (1+4+2+5+3+6)/3 = 7


                  um es vielleicht etwas einfacher zu machen, jetzt nur der Durchschnitt ohne Addition.

                  Beispiel:

                  $a = array(1,3,5);

                  $e = array(1,2,3);

                  Die Berechnung sieht hier so aus:

                  $e[0] = (1)/1 = 1
                  $e[1] = (1+3)/2 = 2
                  $e[2] = (1+3+5)/3 = 3

                  Natürlich müssen die Zahlen im array $e nicht immer Ganzzahlig sein.

                  Kommentar


                  • #10
                    Vielen Dank, in etwa so was habe ich gesucht, ich meine zur Not wäre meins ja gegangen, aber es sollte ja auch halbwegs effizient sein.

                    Wobei ich schon sagen muss, das Übersicht auch nicht total unwichtig ist.

                    Gruß Thoma

                    Denke so ist es halbwegs übersichtlich und kurz:
                    PHP-Code:
                    <?
                    $a = array(1,2,3);
                    $b = array(4,5,6);

                    $max = max(count($a),count($b));
                    $sum = 0;

                    for ($i=0; $i<$max ; $i++)
                    {
                    $sum = $sum + ($a[$i]+$b[$i]);
                    $e[] = $sum /($i+1);
                    }
                    print_r($e);
                    ?>
                    Zuletzt geändert von Thoma; 02.01.2006, 00:32.

                    Kommentar


                    • #11
                      Das ist noch halbwegs übersichtlich, im Vergleich zu
                      PHP-Code:
                      for ($i=0$i<$max=max(count($a),count($b)); $e[]=($sum+=$a[$i]+$b[$i])/($i+=1)); 

                      Kommentar


                      • #12
                        Ja vielen Dank, aber man muss es ja nicht gleich übertreiben. Funktioniert wunderbar. Nur die letzte Version werde ich nicht verwenden, wo einige ja schon mühe mit dem ersten Quellcode hatten.

                        Kommentar

                        Lädt...
                        X