Skip to content

Pretty printing of matrices (and multidimensional arrays) #40

Open

Description

@certik

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

subroutine print_array(a)
and other places.

Then compilers can perhaps optionally use such print_array as default in the Fortran's language print statement.

Activity

  1. jvdp1 commented on Dec 22, 2019

    @jvdp1
    Member

    My preference is for a format like Julia 's one. It would be also a similar format as savetxt.

  2. ivan-pi commented on Dec 24, 2019

    @ivan-pi
    Member

    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

  3. jvdp1 commented on Dec 24, 2019

    @jvdp1
    Member

    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

    Thank you for mentioning this librabry. It seems to be quite complete and flexible. Could we use it (with some modernisations) in stdlib (license?)?

  4. ivan-pi commented on Dec 25, 2019

    @ivan-pi
    Member

    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.

  5. certik commented on Dec 25, 2019

    @certik
    MemberAuthor
  6. ivan-pi commented on Dec 25, 2019

    @ivan-pi
    Member

    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.

  7. jvdp1 commented on Dec 25, 2019

    @jvdp1
    Member

    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.

    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.

  8. added
    topic: utilitiescontainers, strings, files, OS/environment integration, unit testing, assertions, logging, ...
    on Jan 18, 2020
  9. added
    easyDifficulty level is easy and good for starting into this project
    on Mar 11, 2021
  10. utsav-pal commented on Feb 7, 2026

    @utsav-pal

    is this issue still alive

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    easyDifficulty level is easy and good for starting into this projectgood first issueGood for newcomersin progressThis proposal is being worked ontopic: utilitiescontainers, strings, files, OS/environment integration, unit testing, assertions, logging, ...

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions