format mathematica输出结果列表

时间:2011-06-29 15:31:17

标签: wolfram-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
....

欢迎任何关于如何格式化这种输出以便于阅读的建议!

3 个答案:

答案 0 :(得分:6)

您可以使用

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

适用于小输入,但可能不适合多线输入。

enter image description here

(您可以使用Unset[$PrePrint]

再次关闭此功能

答案 1 :(得分: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

*)

<强>更新
在Usavich下面的评论中,他表示他希望将这些表达式分配给变量的列表传递给该函数。这不是直接可能的,因为表达式在过程中评估:

 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,我们可以处理expr:

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

现在可以使用保留列表调用该函数:

exprShowAndEvaluate[expr]

结果与以前一样。

答案 2 :(得分: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}]