Dear all,

I would like to discuss a «cosmetic» feature for numpy. 

I find it useful in my day-to-day work to inspect the values of 1D and 2D numpy 
arrays. Typically I was saving the data in the .txt format and then used the 
next best tool to analyse the numbers.

However, I would prefer to be able to just print an array directly in the 
interactive console (python console for instance) and have the printed array 
formatted in such a way that it can be easily read by human eyes.

Now, the type of formatting is subjective. Nevertheless, I would like to 
propose the one that I have converged to over the years.

The proposed implementation is a standalone function, written in pure python 
(as this «visual» representation will be suitable only for the reasonable-sized 
array, then there is no need to worry about the performance), for example,


def decorate_array(
    object: array_like,
    fmt: str, 
    header: list,
    footer: list,
    column_header: list,
    footer column: list,
    …,
)


If the numpy community agrees that this function fits in the package, then I 
would like to adapt the implementation that I am using now. I would open a PR, 
but I saw that it is recommended to ask for an opinion on this mailing list 
first. 


Below are the examples of how this function would behave (again, the style is 
subjective):


1. Plain real-valued array

decorate_array(
    object = np.random.random((10,3)),
    fmt = ">.4f", 
)

┌────────┬────────┬────────┐
│ 0.0410 │ 0.2844 │ 0.4251 │
├────────┼────────┼────────┤
│ 0.9270 │ 0.7509 │ 0.9892 │
├────────┼────────┼────────┤
│ 0.7380 │ 0.1245 │ 0.1855 │
├────────┼────────┼────────┤
│ 0.4738 │ 0.6671 │ 0.8455 │
├────────┼────────┼────────┤
│ 0.4442 │ 0.5946 │ 0.5874 │
├────────┼────────┼────────┤
│ 0.0789 │ 0.5374 │ 0.6505 │
├────────┼────────┼────────┤
│ 0.8006 │ 0.0970 │ 0.4456 │
├────────┼────────┼────────┤
│ 0.4884 │ 0.4162 │ 0.8283 │
├────────┼────────┼────────┤
│ 0.5082 │ 0.5625 │ 0.8812 │
├────────┼────────┼────────┤
│ 0.2013 │ 0.9937 │ 0.3731 │
└────────┴────────┴────────┘


2. Headers and footers

decorate_array(
    object = np.random.random((2,3)),
    fmt = ">.5f", 
    header = ["l-h-corner", "h1", "h2", "h3"],
    footer = ["l-f-corner", "f1", "f2", "f3"],
    column_header = ["ch1", "ch2", "ch3"],
    footer column = ["cf1", "cf2", "cf3"],
)

┌────────────┬─────────┬─────────┬─────────┬─────┐
│ l-h-corner │      h1 │      h2 │      h3 │     │
├────────────┼─────────┼─────────┼─────────┼─────┤
│        ch1 │ 0.84675 │ 0.80002 │ 0.79360 │ cf1 │
├────────────┼─────────┼─────────┼─────────┼─────┤
│        ch2 │ 0.93482 │ 0.28542 │ 0.28057 │ cf2 │
├────────────┼─────────┼─────────┼─────────┼─────┤
│ l-f-corner │      f1 │      f2 │      f3 │     │
└────────────┴─────────┴─────────┴─────────┴─────┘


3. Complex numbers

┌──────────────┬──────────────┬──────────────┐
│ 0.60 - i0.12 │ 0.66 + i0.18 │ 0.31 - i0.22 │
├──────────────┼──────────────┼──────────────┤
│ 0.52 - i0.33 │ 0.05 - i0.03 │ 0.23 + i0.37 │
└──────────────┴──────────────┴──────────────┘

There are more verbose examples written in the docs page of my sandbox python 
package, but I am not sure if posting the link to it here would be appropriate. 
The three examples above should be enough to grasp the idea.

Best,
Andrey

_______________________________________________
NumPy-Discussion mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3//lists/numpy-discussion.python.org
Member address: [email protected]

Reply via email to