Re: Feature proposal

John Mark Agosta via NumPy-Discussion <[email protected]>
Newsgroups gmane.comp.python.numeric.general
Message-ID <CACxvhVNjqq7z2ypkNXRrEOviYkRBt1_MvTJ9Gge2DmKht+TK-Q@mail.gmail.com>
How much of this functionality is available in the tabulate package?   _JM

______
John Mark Agosta                             LinkedIn:
https://www.linkedin.com/in/john-mark-agosta/
[email protected]    Find me at https://medium.com/@johnmark54


On Tue, Aug 5, 2025 at 6:55 AM Андрей Рыбаков via NumPy-Discussion <
[email protected]> wrote:

> 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]
>

_______________________________________________
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]
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.