2011-06-29 56 views
5

我有一個操作數據的表達式列表。格式mathematica輸出結果列表

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]}] 

輸出看起來像這樣

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

是否有可能以顯示與它的表達沿結果?例如

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

任何有關如何格式化該類輸出以方便閱讀的建議是值得歡迎的!

回答

6

你可以使用

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

這是適合於小投入,但也許不是你想要的多輸入。

enter image description here

(你可以用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

*) 

更新
在下面監獄兔他的評論,表示他想通過這些表情列表分配給一個變量的功能。這是不能直接作爲表達的過程中評價:

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

你必須Hold表達式列表分配前:

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

隨着exprShowAndEvaluate的,我們可以在新版本process expr:

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

現在可以使用所保存的列表調用該功能:

exprShowAndEvaluate[expr] 

結果與以前一樣。

+1

工程很好,但是當將表達式分配給列表,它不再工作。 ''expr = {Min [data],Max [data]};'' ''exprShowAndEvaluate [expr];'' –

+0

我認爲您將不得不使用exprShowAndEvaluate [expr = {Min [data],Max [數據]}]'。 –

+0

@Usavich這是因爲你的列表不再包含原始表達式。 –

0

作爲一個工具,你可以被簡化的兩個功能:

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

自6版本,這些都可以寫得更簡潔明瞭:

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