2011-06-29 2 views
5

J'ai une liste d'expressions qui fonctionnent sur des données.format mathematica afficher une liste de résultats

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 sortie se présente comme suit

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

Est-il possible de montrer le résultat ainsi que son expression? Par exemple

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

Tout conseil sur la façon de formater ce type de sortie pour faciliter la lecture est le bienvenu!

Répondre

6

Vous pouvez utiliser

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

ce qui est bien pour les petites entrées, mais peut-être pas ce que vous voulez pour les entrées multilignes.

enter image description here

(Vous pouvez désactiver cette option à nouveau avec 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

*) 

Mise à jour
Dans son commentaire ci-dessous Usavich, a indiqué qu'il veut transmettre une liste de ces expressions attribué à une variable à la fonction. Ce n'est pas directement possible que les expressions sont dans le processus:

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} 
*) 

Vous devez Hold la liste d'expression avant d'attribuer:

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

Avec une nouvelle version de exprShowAndEvaluate nous pouvons exprimer le processus:

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

La fonction peut maintenant être appelée avec la liste tenue:

exprShowAndEvaluate[expr] 

Résultats qu'avant.

+1

Fonctionne bien, mais quand affecter des expressions à une liste, cela ne fonctionne plus. '' expr = {Min [données], Max [données]}; '' exprShowAndEvaluate [expr]; '' –

+0

Je pense que vous devriez utiliser 'exprShowAndEvaluate [expr = {Min [données], Max [ données]}] '. –

+0

@Usavich C'est parce que votre liste ne contient plus les expressions originales. –

0

En tant que barre latérale, vous disposez de deux fonctions qui peuvent être simplifiées:

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

Depuis la version 6, ceux-ci peuvent être écrit plus concis et lisible:

Sum[Log[i], {i, data}] 
Sum[i^2, {i, data}] 
Questions connexes