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]