2011-06-29 8 views
5

Tengo una lista de expresiones que operan en datos.formato mathematica salida una lista de resultados

Min[data] 
Max[data] 
Covariance[data, data1] 
Mean[data] 
GeometricMean[data] 
Total[data] 
Sum[Log[data[[i]]], {i, 1, Length[data]}] 
Sum[(data[[i]])^2, {i, 1, Length[data]}] 

La salida se parece a esto

Out[1]= 1.9 
Out[2]= 3.1 
.... 

¿Es posible mostrar el resultado junto con su expresión? Por ejemplo

Min[data] = 1.9 
Max[data] = 3.1 
.... 

¡Cualquier consejo sobre cómo formatear ese tipo de salida para una lectura fácil es bienvenido!

Respuesta

6

Usted podría utilizar

$PrePrint = 
    Function[a, 
    Row[{ToExpression[InString[$Line], StandardForm, HoldForm], " = ", 
    a}]]; 

lo cual está bien para entradas pequeñas, pero quizás no lo que quiere para las entradas de varias líneas.

enter image description here

(Puede desactivar esta opción de nuevo con Unset[$PrePrint])

4
data = {1, 2, 3, 4}; 
data1 = {2, 1, 4, 3}; 

ClearAll[exprShowAndEvaluate]; 
SetAttributes[exprShowAndEvaluate, {HoldAll, Listable}]; 
exprShowAndEvaluate[expr_] := Print[HoldForm[expr], "=", expr]; 

exprShowAndEvaluate[{Min[data], 
    Max[data], 
    Covariance[data, data1], 
    Mean[data], 
    GeometricMean[data], 
    Total[data], 
    Sum[Log[data[[i]]], {i, 1, Length[data]}], 
    Sum[(data[[i]])^2, {i, 1, Length[data]}]}]; 

(* output ==> 

enter image description here

*) 

actualización
En su comentario a continuación Usavich, indicó que quiere pasar una lista de estas expresiones asignado a una variable a la función. Esto no es directamente posible, ya que las expresiones se evalúan en el proceso:

expr = 
{ 
    Min[data], Max[data], Covariance[data, data1], Mean[data], 
    GeometricMean[data], Total[data], 
    Sum[Log[data[[i]]], {i, 1, Length[data]}], 
    Sum[(data[[i]])^2, {i, 1, Length[data]}] 
    } 

(* Output ==> 
    {1, 4, 1, 5/2, 2^(3/4) 3^(1/4), 10, Log[2] + Log[3] + Log[4], 30} 
*) 

Tienes que Hold la lista de expresiones antes de asignar:

expr = 
Hold[ 
    { 
    Min[data], Max[data], Covariance[data, data1], Mean[data], 
    GeometricMean[data], Total[data], 
    Sum[Log[data[[i]]], {i, 1, Length[data]}], 
    Sum[(data[[i]])^2, {i, 1, Length[data]}] 
    } 
    ] 

enter image description here

Con una nueva versión de exprShowAndEvaluate podemos proceso expr:

ClearAll[exprShowAndEvaluate]; 
exprShowAndEvaluate[expr_Hold] := 
    Module[{tempExpr}, 
    tempExpr = ReleaseHold[Map[HoldForm, expr, {2}]]; 
    Print[#1, "=", ReleaseHold[#1]] & /@ tempExpr 
    ]; 

La función ahora se puede llamar con la lista de espera:

exprShowAndEvaluate[expr] 

Resultados como antes.

+1

Funciona muy bien, pero cuando asignar expresiones a una lista, ya no funciona. '' expr = {Min [datos], Max [datos]}; '' '' exprShowAndEvaluate [expr]; '' –

+0

Creo que tendrías que usar 'exprShowAndEvaluate [expr = {Min [data], Max [ datos]}] '. –

+0

@Usavich Eso es porque su lista ya no contiene las expresiones originales. –

0

Como una barra lateral, tiene dos funciones que puede simplificarse:

Sum[Log[data[[i]]], {i, 1, Length[data]}] 
Sum[(data[[i]])^2, {i, 1, Length[data]}] 

Desde la versión 6, estos pueden ser escrito de manera más concisa y legible:

Sum[Log[i], {i, data}] 
Sum[i^2, {i, data}] 
Cuestiones relacionadas