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-469437857,https://api.github.com/repos/pydata/xarray/issues/2791,469437857,MDEyOklzc3VlQ29tbWVudDQ2OTQzNzg1Nw==,6815844,2019-03-04T21:57:04Z,2019-03-04T21:57:04Z,MEMBER,"@yohai , sorry, I misunderstood `__format__` and `__repr__`. I like shoyer's > vectorize format() over each element of the array (the proposal in the linked numpy issue) as I feel it more consistent with the existing xarray `__repr__`. I sometimes want a 0d-dataarray to behave as a native scalar. `format` is one of a typical case, but there are several other cases, e.g., `np.ones(xr.DataArray([0])[0])`. Therefore, I always needs to be carefule whether the scalar is xarray object or not. I am a bit worrying if printing 0d-dataarray as a scalar would confuse me as it is a scalar not a 0d-array. ","{""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-469325571,https://api.github.com/repos/pydata/xarray/issues/2791,469325571,MDEyOklzc3VlQ29tbWVudDQ2OTMyNTU3MQ==,1217238,2019-03-04T16:48:03Z,2019-03-04T16:48:03Z,MEMBER,"Here's a related NumPy issue: https://github.com/numpy/numpy/issues/5543 I guess there are two possible behaviors for `'{:d}'.format(x)` where `x` is a DataArray object: - coerce scalar arrays to native Python numbers and format it like a `float` - vectorize `format()` over each element of the array (the proposal in the linked numpy issue) 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.","{""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 https://github.com/pydata/xarray/issues/2791#issuecomment-469160334,https://api.github.com/repos/pydata/xarray/issues/2791,469160334,MDEyOklzc3VlQ29tbWVudDQ2OTE2MDMzNA==,6815844,2019-03-04T08:23:42Z,2019-03-04T08:23:42Z,MEMBER,"I agree that it is a bit annoying that 1d DataArray prints much information especially we want to embed the value into a string. However, I'm a bit worried whether it would be surprising if an object that looks a native scalar is actually an xr.DataArray of one element, especially when working in an interactive environment. ","{""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-469155529,https://api.github.com/repos/pydata/xarray/issues/2791,469155529,MDEyOklzc3VlQ29tbWVudDQ2OTE1NTUyOQ==,1217238,2019-03-04T08:05:53Z,2019-03-04T08:05:53Z,MEMBER,"Yes, I think this would be a nice addition. This would entail implementing a `__format__` method on `xarray.DataArray`: https://docs.python.org/3/reference/datamodel.html#object.__format__","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,415209776