Foros del Web » Programando para Internet » PHP »

Multiplicar dos arrays, estadística

Estas en el tema de Multiplicar dos arrays, estadística en el foro de PHP en Foros del Web. Hola, tenía una duda estúpida pero que no consigo hallar la solución. Estoy haciendo un programa para estadística. En dos textarea se rellenan xi y ...
  #1 (permalink)  
Antiguo 07/06/2012, 14:27
Avatar de Adrii952  
Fecha de Ingreso: diciembre-2011
Ubicación: Madrid
Mensajes: 116
Antigüedad: 12 años, 10 meses
Puntos: 7
Multiplicar dos arrays, estadística

Hola, tenía una duda estúpida pero que no consigo hallar la solución. Estoy haciendo un programa para estadística.
En dos textarea se rellenan xi y fi, luego con explode los meto en un array cada uno por los saltos de línea, y me quedo con dos arrays; $xi_data y $fi_data
Ahora necesito hacer la típica columna de xi·fi, por lo que necesito multiplicar cada valor de un array por el del otro y mostrarlo en un tercer textarea. El tercer array se llamaría $xifi_data y luego calcularía la suma de todos los números con la función array_sum()

En la calculadora lo hago más o menos así con BASIC:
Do
List 1[A]xList 2[A]->List 3[A]
A+1->A
LpWhile A!=M

Seguro que es una tontería que se hace con while o foreach pero no caigo, espero que me puedan ayudar, gracias!
  #2 (permalink)  
Antiguo 07/06/2012, 14:31
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 16 años, 3 meses
Puntos: 1532
Respuesta: Multiplicar dos arrays, estadística

yo usaría foreach, o for, es más cómodo

Código PHP:
Ver original
  1. foreach ($array1 as $key => $value) {
  2.       $array3[$key] = $value  * $array2[$key];
  3. }
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #3 (permalink)  
Antiguo 07/06/2012, 14:32
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 7 meses
Puntos: 406
Respuesta: Multiplicar dos arrays, estadística

o.O no entiendo bien cual es el problema pero podrías hacer algo así...

Código PHP:
Ver original
  1. $xi = array(1,2,3,4,5,6,7,8,9,0);
  2. $fi = array(1,2,3,4,5,6,7,8,9,0);
  3. $resultado = array();
  4. for($i=0; $i<=10; $i++) {
  5.      $resultado[] = $xi[$i] * $fi[$i];
  6. }
  7.  
  8. echo '<pre>';
  9. var_dump($resultado);
  10. echo '</pre>';
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #4 (permalink)  
Antiguo 07/06/2012, 15:43
Avatar de Adrii952  
Fecha de Ingreso: diciembre-2011
Ubicación: Madrid
Mensajes: 116
Antigüedad: 12 años, 10 meses
Puntos: 7
Respuesta: Multiplicar dos arrays, estadística

Gracias a los dos, pero sólo me sirvió el de maycolalvarez, gracias.
@Nemutagk el problema simplemente es que no tengo conocimientos suficientes de PHP como para hacer algo tan simple como el code de maycolalvarez, que es exactamente lo que buscaba.

Así es como quedó mi cutre-código:

Código PHP:
<?php
header
("Content-type: text/html; charset=utf-8");
if (
$_POST['xi'] == "") {
?>
<meta name="Content-Type"  content="text/html;" http-equiv="content-type" charset="utf-8" />
<form id='login' action='est.php' method='post' accept-charset='UTF-8'>
<textarea name="xi" rows="30" cols="20">xi...</textarea>
<textarea name="fi" rows="30" cols="20">fi...</textarea><br>
<input type='submit' name='Submit' value='Calcular' />
</form>
<?php
} else {
    
$xi_data explode("\r\n",$_POST['xi']);
    
$fi_data explode("\r\n",$_POST['fi']);
    foreach (
$xi_data as $key => $value) {
        
$xifi_data[$key] = $value $fi_data[$key];
    }
    foreach (
$fi_data as $key => $value) {
        
$Fi_data[$key] = $value $Fi_data[$key-1];
    }
    foreach (
$xi_data as $key => $value) {
        
$xi2fi_data[$key] = pow($value,2) * $fi_data[$key];
    }
    echo 
'<textarea rows="1" cols="20">xi:</textarea>';
    echo 
'<textarea rows="1" cols="20">fi:</textarea>';
    echo 
'<textarea rows="1" cols="20">xi·fi:</textarea>';
    echo 
'<textarea rows="1" cols="20">Fi:</textarea>';
    echo 
'<textarea rows="1" cols="20">xi²fi:</textarea><br>';
    echo 
'<textarea name="xi" rows="30" cols="20">'.$_POST['xi'].'</textarea>';
    echo 
'<textarea name="fi" rows="30" cols="20">'.$_POST['fi'].'</textarea>';
    echo 
'<textarea name="xifi" rows="30" cols="20">';
    foreach (
$xifi_data as $xifi) {
        echo 
$xifi."\n";
    }
    echo 
'</textarea>';
    echo 
'<textarea name="Fi" rows="30" cols="20">';
    foreach (
$Fi_data as $Fi) {
        echo 
$Fi."\n";
    }
    echo 
'</textarea>';
    echo 
'<textarea name="xi²fi" rows="30" cols="20">';
    foreach (
$xi2fi_data as $xi2fi) {
        echo 
$xi2fi."\n";
    }
    echo 
'</textarea>';
    
    
$comp_xi preg_replace("/[^0-9]/",""$_POST['xi']); 
    
$comp_fi preg_replace("/[^0-9]/",""$_POST['fi']); 
    if (!
$comp_xi && !$comp_fi) {
        echo 
'<br>Error: Los datos de xi y de fi solo pueden ser númericos';
        exit;
    } else {
        if (
count($xi_data) != count($fi_data)) {
            echo 
'<br>Error: La cantidad de datos de xi y de fi debe ser la misma';
            exit;
        } else {
            echo 
'<br>'.count($xi_data).' filas insertadas.';
        }
    }
    
$sum_fi_data    array_sum($fi_data);
    
$sum_xifi_data    array_sum($xifi_data);
    
$sum_Fi_data    array_sum($Fi_data);
    
$sum_xi2fi_data    array_sum($xi2fi_data);
    
$media            = ($sum_xifi_data/$sum_fi_data);
    
$varianza        = ($sum_xi2fi_data/$sum_fi_data)-pow($media,2);
    
$desviacion        sqrt($varianza);
    echo 
'<br>∑ fi: '.$sum_fi_data;
    echo 
'<br>∑ xifi: '.$sum_xifi_data;
    echo 
'<br>∑ Fi: '.$sum_Fi_data;
    echo 
'<br>∑ xi²fi: '.$sum_xi2fi_data;
    echo 
'<br>Media: '.$media;
    echo 
'<br>Varianza: '.$varianza;
    echo 
'<br>Desviación típica(σ): '.$desviacion;
    echo 
'<br>Coeficiente de Variación: '.($desviacion/$media);

}

?>
Lo podéis probar tal cual. Hace lo básico de estadística. Saludos

Etiquetas: arrays, multiplicar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:48.