2011-06-29 30 views
5

Tôi có một danh sách các biểu thức hoạt động trên dữ liệu.định dạng mathematica xuất danh sách kết quả

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

Kết quả trông như thế này

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

Có thể hiển thị các kết quả cùng với biểu hiện của nó? Ví dụ:

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

Bất kỳ lời khuyên nào về cách định dạng kiểu đầu ra đó để đọc dễ dàng đều được chào đón!

Trả lời

6

Bạn có thể sử dụng

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

đó là tốt cho đầu vào nhỏ, nhưng có lẽ không phải những gì bạn muốn cho đầu vào có nhiều dòng.

enter image description here

(Bạn có thể tắt chức năng này một lần nữa với 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

*) 

Cập nhật
Trong bình luận của ông dưới đây Usavich, cho biết ông muốn vượt qua một danh sách các biểu thức gán cho một biến đến chức năng. Đây không phải là trực tiếp có thể là những biểu hiện đánh giá trong quá trình này:

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

Bạn phải Hold danh sách biểu trước khi gán:

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

Với một phiên bản mới của exprShowAndEvaluate chúng ta có thể quy trình expr:

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

Chức năng bây giờ có thể được gọi với danh sách tổ chức:

exprShowAndEvaluate[expr] 

Kết quả như trước.

+1

Hoạt động tốt, nhưng khi gán các biểu thức cho một danh sách, nó không hoạt động nữa. '' expr = {Min [dữ liệu], Max [dữ liệu]}; '' '' exprShowAndEvaluate [expr]; '' –

+0

Tôi nghĩ bạn sẽ phải sử dụng 'exprShowAndEvaluate [expr = {Min [data], Max [ dữ liệu]}] '. –

+0

@Usavich Đó là vì danh sách của bạn không chứa các biểu thức gốc nữa. –

0

Là một bên, bạn có hai chức năng mà có thể được đơn giản hóa:

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

Kể từ phiên bản 6, chúng có thể được được viết ngắn gọn và dễ đọc hơn:

Sum[Log[i], {i, data}] 
Sum[i^2, {i, data}] 
Các vấn đề liên quan