html_url,issue_url,id,node_id,user,created_at,updated_at,author_association,body,reactions,performed_via_github_app,issue https://github.com/pydata/xarray/issues/2791#issuecomment-471136862,https://api.github.com/repos/pydata/xarray/issues/2791,471136862,MDEyOklzc3VlQ29tbWVudDQ3MTEzNjg2Mg==,6164157,2019-03-09T02:14:53Z,2019-03-09T02:15:40Z,CONTRIBUTOR,"To make things concrete, the solution that I have in mind is as simple as adding this function to `DataArray`: ```python def __format__(self, format_spec): return self.values.__format__(format_spec) ``` Here's one use case I have encountered: ```python ds=xr.Dataset({'A':(['x','y','z'], np.random.rand(40,40,3)), 'B':(['z'], np.random.randn(3))}, coords={'z':[31,42,45]}) fg=ds.A.plot(col='z') for ax, d in zip(fg.axes.flat, fg.name_dicts.flat): t=ax.get_title() ax.set_title('{} and B(z)={:1.2}'.format(t, ds.sel(**d).B)) ``` This way, if you want to vectorize a `__format__` on an array can you not simply do ```python ar = xr.DataArray([39, 103, id(xr)]) print('{:3.3f} {:3.3e} {:x}'.format(*ar)) #prints `39.000 1.030e+02 10e5bb548` ``` ","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,415209776 https://github.com/pydata/xarray/issues/2791#issuecomment-470801183,https://api.github.com/repos/pydata/xarray/issues/2791,470801183,MDEyOklzc3VlQ29tbWVudDQ3MDgwMTE4Mw==,6164157,2019-03-08T04:30:22Z,2019-03-08T04:30:22Z,CONTRIBUTOR,"I tend towards the former, to coerce singleton arrays to behave as scalars of their `dytpe`. I think it makes more sense in terms of use cases (at least everything that I needed). I don't mind implementing it if there is agreement as to which of the two to do. > These behaviors would definitely conflict for scalar objects -- in the second case, we would still want to include some indication that it's an `xarray.DataArray`. NumPy doesn't have a conflict because indexing an array results in a NumPy scalars, which prints like Python builtin scalars. @shoyer I don't see why would that be the case. If I format something as `'{:04d} {:3.5e} {:2.3E}'.format(dataarray)` or whatnot, I would expect that the average user would expect to get `'0043 4.35000e+02 2.450E+02'` in return, without any indication that these are data arrays. ","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,415209776 https://github.com/pydata/xarray/issues/2791#issuecomment-469320419,https://api.github.com/repos/pydata/xarray/issues/2791,469320419,MDEyOklzc3VlQ29tbWVudDQ2OTMyMDQxOQ==,6164157,2019-03-04T16:35:09Z,2019-03-04T16:35:44Z,CONTRIBUTOR,"On the one hand I agree, but note that the same behavior works for numpy arrays ```python import numpy as np a=np.array([1,2,3,4]) ' '.join('{:d}'.format(v) for v in a) # prints '1 2 3 4' ```","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,415209776