I produce a number of large arrays in Julia using a script file. Printing out the whole array is cumbersome but I'd like to check the first few rows make sense.
I know in the REPL there's printing which is limited by the screen size e.g.
julia> zeros(1000,10)
1000×10 Array{Float64,2}:
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
⋮ ⋮
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
But I can't find any print/show function in base Julia which mimics this for scripts, say only printing out the first 10 rows of an array or something like R's head (I would have expected showcompact to do something like this).
Is there an analogous function to R's head in Julia or do I have to write my own.
As I mentioned in a comment, the way to do this in v0.5 is to use an IOContext.
A very simple way to limit the data is to pass the :limit => true parameter to the IOContext;
julia> show(IOContext(stdout, :limit => true), v)
[0.147959 0.414018 … 0.595528 0.852563; 0.32679 0.824953 … 0.432143 0.036279; … ; 0.877398 0.661854 … 0.197207 0.15596; 0.0522946 0.508075 … 0.835359 0.705987]
But this still does not print out the way the REPL does; that's because show with two arguments uses a single-line display. To use a multiline display, pass text/plain as the second argument to show (a MIME type):
julia> show(IOContext(stdout, :limit => true), "text/plain", v)
100×100 Array{Float64,2}:
0.147959 0.414018 0.0282934 … 0.816132 0.595528 0.852563
0.32679 0.824953 0.0582351 0.822526 0.432143 0.036279
0.754989 0.724317 0.533966 0.987273 0.931932 0.973622
0.547866 0.282694 0.0295411 0.75929 0.886218 0.0813057
0.0626663 0.111795 0.625083 0.439983 0.562143 0.669046
0.712093 0.469622 0.377298 … 0.298224 0.31853 0.376066
0.774625 0.754328 0.756725 0.61113 0.76566 0.999292
0.917846 0.308363 0.489246 0.715311 0.175302 0.124059
0.310922 0.140575 0.20635 0.0280192 0.683004 0.168129
0.753361 0.755103 0.831806 0.118009 0.122374 0.281476
⋮ ⋱
0.420264 0.7614 0.748408 0.330983 0.0776789 0.309464
0.984379 0.851735 0.595121 0.534982 0.255317 0.743713
0.814505 0.765941 0.71852 0.730677 0.477631 0.0360992
0.910384 0.0747604 0.490685 0.0904559 0.0756424 0.313898
0.628416 0.0790874 0.401488 … 0.523521 0.397249 0.58112
0.578361 0.336352 0.261118 0.838256 0.387374 0.451647
0.66724 0.586342 0.378968 0.602694 0.450686 0.901279
0.877398 0.661854 0.685156 0.658952 0.197207 0.15596
0.0522946 0.508075 0.244423 0.95935 0.835359 0.705987
You can of course change how many rows are shown by passing in :displaysize to the IOContext:
julia> show(IOContext(stdout, :limit => true, :displaysize => (10, 10)), "text/plain", v)
100×100 Array{Float64,2}:
0.147959 … 0.852563
0.32679 0.036279
0.754989 0.973622
⋮ ⋱
0.877398 0.15596
0.0522946 0.705987
Overall, IOContext is very flexible. See its documentation for more details.
I believe this thread is out of date. For me on julia v1.4.1 , the display function does not print a limited array, and
a = zeros(1000,6)
show(IOContext(STDOUT, limit=true), "text/plain", a)
yields an error. Instead I found this works
a = zeros(1000,6)
show(IOContext(stdout, :limit => true), "text/plain", a)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With