Open
Description
Currently the standard Fortran's print *, A
prints a 2D array A
as a 1D list of numbers. Rather, I would like stdlib
to have a function print_array
(we can discuss a better name) that would print the array as NumPy:
>>> numpy.arange(10000).reshape(250,40)
array([[ 0, 1, 2, ..., 37, 38, 39],
[ 40, 41, 42, ..., 77, 78, 79],
[ 80, 81, 82, ..., 117, 118, 119],
...,
[9880, 9881, 9882, ..., 9917, 9918, 9919],
[9920, 9921, 9922, ..., 9957, 9958, 9959],
[9960, 9961, 9962, ..., 9997, 9998, 9999]])
or Julia:
julia> B = [1 2; 3 4; 5 6; 7 8; 9 10]
5×2 Array{Int64,2}:
1 2
3 4
5 6
7 8
9 10
Julia can also use nice unicode characters for ... and vertical ... if the array is too large.
Then we should use this function at
stdlib/src/tests/loadtxt/test_loadtxt.f90
Line 21 in ae5591f
Then compilers can perhaps optionally use such print_array
as default in the Fortran's language print
statement.
Activity
jvdp1 commentedon Dec 22, 2019
My preference is for a format like Julia 's one. It would be also a similar format as savetxt.
ivan-pi commentedon Dec 24, 2019
One prior art - Algorithm 892: DISPMODULE, a Fortran 95 module for pretty-printing matrices
https://dl.acm.org/citation.cfm?id=1486531
The code can be downloaded from netlib: http://netlib.org/toms/892.zip
jvdp1 commentedon Dec 24, 2019
Thank you for mentioning this librabry. It seems to be quite complete and flexible. Could we use it (with some modernisations) in
stdlib
(license?)?ivan-pi commentedon Dec 25, 2019
Code published in TOMS is under the ACM Software License Agreement which allows usage for non-commercial purposes. I think that it is not compatible with what we want to achieve here.
I know Scipy contains the TOMS 748 algorithm. I checked and it looks like they wrote their own implementation.
certik commentedon Dec 25, 2019
ivan-pi commentedon Dec 25, 2019
I had a look at the DISPMODULE API and it is indeed very nice and flexible supporting different formats (e.g. with a title, numbered rows and columns, precision, separators) and even printing several matrices adjacent to one another.
Taking a peak inside I can say that it would be beneficial to first start work on our own string module to handle conversion of reals/integers/logicals to character strings and some tools to parse format strings.
jvdp1 commentedon Dec 25, 2019
I agree with that. I would also add that I think it would be goood to first take a discussion on the issue #35 , because it will be the same problem for this issue #40 (i.e., printing matrices of different kinds).
Also, since we not use DISPMODULE, we could base this API on those of
savetxt
. Afterall, savetxt write a matrix to a file instead to the standard output.disp
(display variable values formatted). #520print_array
function to print arrays to output units #981