Pretty-printing tensors

535 views
Skip to first unread message

Iain Dunning

unread,
Apr 30, 2014, 3:52:37 PM4/30/14
to julia...@googlegroups.com
Hi all,

I'm trying to write some pretty-print code for one of my packages. In particular, I want to print tensors, e.g. rand(3,3,3)
Now the (exported) options seem to be "print" and "dump"

For 2D:
julia> print(rand(3,3))
[0.9848410067397786 0.7395088321894974 0.08335407347392443
 0.9908990998709222 0.6563403470680476 0.9422669325824669
 0.967619446504451 0.995657061136656 0.14417657902926084]

+? Lots of precision
- Not aligned
- Square brackets

julia> dump(rand(3,3))
Array(Float64,(3,3)) 3x3 Array{Float64,2}:
 0.60914    0.149033  0.431226
 0.0413379  0.872331  0.24617 
 0.528959   0.225907  0.938011

+ Aligned
+ "Nice" amount of precision
- Type info

For 3D, the output of print is a bit confusing (just prints the three slices - not even clear which slices though), whereas dump prints something unambiguous

julia> dump(rand(2,2,2))
Array(Float64,(2,2,2)) 2x2x2 Array{Float64,3}:
[:, :, 1] =
 0.698132   0.646175
 0.0263156  0.721012

[:, :, 2] =
 0.687558  0.0205718
 0.89261   0.383277 

Now I was digging around with auto-complete and found the un-exported function print_matrix which has the the alignment of dump, and precision of print - but only works for <= 2D.

Is there some (reasonable) way to export that nice dump functionality without the type info? I tried to trace the dump methods through but got lost.

Iain Dunning

unread,
Apr 30, 2014, 9:35:42 PM4/30/14
to julia...@googlegroups.com
Additionally, its seems like print for a matrix is designed to let you recover the raw matrix somehow, and dump is for humans.
But for strings, dump's output lets you recover it (escaped newlines), and print is for humans?

andrew cooke

unread,
May 1, 2014, 8:19:19 AM5/1/14
to julia...@googlegroups.com

if you've not seen it, the general guidelines for these different functions are here - http://julia.readthedocs.org/en/latest/stdlib/base/#text-i-o

there's print and show, and by default one calls the other.  iirc the repl uses show (but don't quote me on that).

things are complicated by the all/compact distinction.

andrew
Reply all
Reply to author
Forward
0 new messages