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/1914#issuecomment-396738702,https://api.github.com/repos/pydata/xarray/issues/1914,396738702,MDEyOklzc3VlQ29tbWVudDM5NjczODcwMg==,1217238,2018-06-12T21:23:09Z,2018-06-12T21:23:09Z,MEMBER,"[xyzpy](http://xyzpy.readthedocs.io) (by @jcmgray) looks like it might be a nice way to solve this problem, e.g., see http://xyzpy.readthedocs.io/en/latest/examples/complex%20output%20example.html ","{""total_count"": 1, ""+1"": 1, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,297560256 https://github.com/pydata/xarray/issues/1914#issuecomment-367578341,https://api.github.com/repos/pydata/xarray/issues/1914,367578341,MDEyOklzc3VlQ29tbWVudDM2NzU3ODM0MQ==,1217238,2018-02-22T06:13:58Z,2018-02-22T06:13:58Z,MEMBER,"This issue has brought up a lot of the same issues: https://github.com/pydata/xarray/issues/1773 Clearly, we need better documentation here at the very least.","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,297560256 https://github.com/pydata/xarray/issues/1914#issuecomment-366884882,https://api.github.com/repos/pydata/xarray/issues/1914,366884882,MDEyOklzc3VlQ29tbWVudDM2Njg4NDg4Mg==,1217238,2018-02-20T07:02:37Z,2018-02-20T07:02:37Z,MEMBER,"`xarray.broadcast()` could also be helpful for generating a cartesian product. Something like `xarray.broadcast(*data.coords.values())` would get you three 3D DataArray objects. `apply_ufunc` with `vectorize=True` could also achieve what you're looking for here: ```python import xarray as xr import numpy as np data = xr.Dataset(coords={'x': np.linspace(-1, 1), 'y': np.linspace(0, 10), 'a': 1, 'b': 5}) def some_function(x, y): return float(x) * float(y) xr.apply_ufunc(some_function, data['x'], data['y'], vectorize=True) ``` Results in: ``` array([[ -0. , -0.204082, -0.408163, ..., -9.591837, -9.795918, -10. ], [ -0. , -0.195752, -0.391504, ..., -9.200333, -9.396085, -9.591837], [ -0. , -0.187422, -0.374844, ..., -8.80883 , -8.996252, -9.183673], ..., [ 0. , 0.187422, 0.374844, ..., 8.80883 , 8.996252, 9.183673], [ 0. , 0.195752, 0.391504, ..., 9.200333, 9.396085, 9.591837], [ 0. , 0.204082, 0.408163, ..., 9.591837, 9.795918, 10. ]]) Coordinates: * x (x) float64 -1.0 -0.9592 -0.9184 -0.8776 -0.8367 -0.7959 ... a int64 1 b int64 5 * y (y) float64 0.0 0.2041 0.4082 0.6122 0.8163 1.02 1.224 1.429 ... ``` You can even do this with dask arrays if you set `dask='parallelized'`. That said, it does feel like there's some missing functionality here for the xarray equivalent of `ndenumerate`. I'm not entirely sure what the right API is, yet.","{""total_count"": 1, ""+1"": 1, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,297560256 https://github.com/pydata/xarray/issues/1914#issuecomment-366825366,https://api.github.com/repos/pydata/xarray/issues/1914,366825366,MDEyOklzc3VlQ29tbWVudDM2NjgyNTM2Ng==,6815844,2018-02-19T23:21:05Z,2018-02-19T23:34:58Z,MEMBER,"I am not sure if it is efficient to interact with a cluster, but I often use `MultiIndex` for make a cartesian product, ```python In [1]: import xarray as xr ...: import numpy as np ...: data = xr.DataArray(np.full((3, 4), np.nan), dims=('x', 'y'), ...: coords={'x': [0, 1, 2], 'y': ['a', 'b', 'c', 'd']}) ...: ...: data ...: Out[1]: array([[ nan, nan, nan, nan], [ nan, nan, nan, nan], [ nan, nan, nan, nan]]) Coordinates: * x (x) int64 0 1 2 * y (y) array([ nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan]) Coordinates: * xy (xy) MultiIndex - x (xy) int64 0 0 0 0 1 1 1 1 2 2 2 2 - y (xy) object 'a' 'b' 'c' 'd' 'a' 'b' 'c' 'd' 'a' 'b' 'c' 'd' ``` For the above example, `data` becomes 1-dimensional with coordinate `xy`, where `xy` is a product of `x` and `y`. Each entry of `xy` is tuple of 'x' and 'y' value, ```python In [3]: data1[0] Out[3]: array(np.nan) Coordinates: xy object (0, 'a') ``` and we can assign a value for given coordinate values by `loc` method, ```python In [5]: # Assuming we found the result with (1, 'a') is 2.0 ...: data1.loc[(1, 'a'), ] = 2.0 In [6]: data1 Out[6]: array([ nan, nan, nan, nan, 2., nan, nan, nan, nan, nan, nan, nan]) Coordinates: * xy (xy) MultiIndex - x (xy) int64 0 0 0 0 1 1 1 1 2 2 2 2 - y (xy) object 'a' 'b' 'c' 'd' 'a' 'b' 'c' 'd' 'a' 'b' 'c' 'd' ``` Note that we need to access via `data1.loc[(1, 'a'), ]`, rather than `data1.loc[(1, 'a')]` (last comma in the bracket is needed.) EDIT: I modified my previous comment to take the partial assignment into accout.","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,297560256 https://github.com/pydata/xarray/issues/1914#issuecomment-366791162,https://api.github.com/repos/pydata/xarray/issues/1914,366791162,MDEyOklzc3VlQ29tbWVudDM2Njc5MTE2Mg==,5635139,2018-02-19T20:05:53Z,2018-02-19T20:05:53Z,MEMBER,"I _think_ that this shouldn't be too hard to 'get done' but also that xarray may not give you much help natively. (I'm not sure though, so take this as hopefully helpful contribution rather than a definitive answer) Specifically, can you do (2) by generating a product of the coords? Either using numpy, stacking, or some simple python: ```python In [3]: list(product(*((data[x].values) for x in data.dims))) Out[3]: [(0.287706062977495, 0.065327131503921), (0.287706062977495, 0.17398282388217068), (0.287706062977495, 0.1455022501442349), (0.42398126102299216, 0.065327131503921), (0.42398126102299216, 0.17398282388217068), (0.42398126102299216, 0.1455022501442349), (0.13357153947234057, 0.065327131503921), (0.13357153947234057, 0.17398282388217068), (0.13357153947234057, 0.1455022501442349), (0.42347765161572537, 0.065327131503921), (0.42347765161572537, 0.17398282388217068), (0.42347765161572537, 0.1455022501442349)] ``` then distribute those out to a cluster if you need, and then unstack them back into a dataset? ","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,297560256