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-435717326,https://api.github.com/repos/pydata/xarray/issues/1914,435717326,MDEyOklzc3VlQ29tbWVudDQzNTcxNzMyNg==,10928117,2018-11-04T23:07:56Z,2018-11-04T23:07:56Z,NONE,"@jcmgray I had to miss your reply to this issue, I saw it just now. I love your code! I will definitely include xyzpy in my tools from now on ;-).","{""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/1973#issuecomment-371184796,https://api.github.com/repos/pydata/xarray/issues/1973,371184796,MDEyOklzc3VlQ29tbWVudDM3MTE4NDc5Ng==,10928117,2018-03-07T15:56:01Z,2018-03-07T18:59:18Z,NONE,"I just found one way to do it
```python
ds = ds2.transpose('a', 'n')
tmp = []
for n, p in enumerate(ds.a):
a = p.data.tolist()
x = ds.x[n].data.tolist()
y = ds.y[n].data.tolist()
tmp.append(xr.DataArray(y, coords={'x': x, 'a': a}, dims='x'))
```
```python
>>> ds1.equals(ds)
True
```
I have a strong feeling that there should be much easier way to do it though...
Edit: I found a bit nicer way to do it
```python
ds = ds2.set_coords('x')
items = [ds.sel(a=a).swap_dims({'n': 'x'}) for a in ds.a]
ds = xr.concat(items, dim='a')
ds = ds.drop('n')
```
```python
>>> ds1.equals(ds)
True
```
however it still does not seem intuitive enough...","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,303130664
https://github.com/pydata/xarray/issues/1914#issuecomment-367677038,https://api.github.com/repos/pydata/xarray/issues/1914,367677038,MDEyOklzc3VlQ29tbWVudDM2NzY3NzAzOA==,10928117,2018-02-22T13:15:11Z,2018-02-22T13:15:11Z,NONE,"@shoyer Thanks for your suggestions and linking the other issue. I think this one can also be labelled as the ""usage question"".","{""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-366833780,https://api.github.com/repos/pydata/xarray/issues/1914,366833780,MDEyOklzc3VlQ29tbWVudDM2NjgzMzc4MA==,10928117,2018-02-20T00:27:36Z,2018-02-20T00:27:36Z,NONE,"After preparing list similar to ``[{'x': 0, 'y': 'a'}, {'x': 1, 'y': 'a'}, ...]`` interaction with cluster is quite efficient. One can easily pass such a thing to ``async_map`` of ``ipyparallel``.
Thanks for your suggestion, I need to try few things. I also want to try to extend it to function that computes few different things that could be multi-valued, e.g.
```python
def dummy(x, y):
ds = xr.Dataset(
{'out1': ('n', [1*x, 2*x, 3*x]), 'out2': ('m', [x, y])},
coords = {'x': x, 'y': y, 'n': range(3), 'm': range(2)}
)
return ds
```
and then group together such outputs... Ok, I know. I go from simple problem to much more complicated one, but isn't it the case usually?
","{""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-366819497,https://api.github.com/repos/pydata/xarray/issues/1914,366819497,MDEyOklzc3VlQ29tbWVudDM2NjgxOTQ5Nw==,10928117,2018-02-19T22:40:17Z,2018-02-19T22:58:02Z,NONE,"For ""get done"" I had for example the following (similar to what I linked as my initial attempt)
```python
coordinates = {
'x': np.linspace(-1, 1),
'y': np.linspace(0, 10),
}
constants = {
'a': 1,
'b': 5
}
inps = [{**constants, **{k: v for k, v in zip(coordinates.keys(), x)}}
for x in list(it.product(*coordinates.values()))]
def f(x, y, a, b):
""""""Some dummy function.""""""
v = a * x**2 + b * y**2
return xr.DataArray(v, {'x': x, 'y': y, 'a': a, 'b': b})
# simulate computation on cluster
values = list(map(lambda s: f(**s), inps))
# gather and unstack the inputs
ds = xr.concat(values, dim='new', coords='all')
ds = ds.set_index(new=list(set(ds.coords) - set(ds.dims)))
ds = ds.unstack('new')
```
It is very close to what you suggest. My main question is if this can be done better. Mainly I am wondering if
1. Is there any built-in iterator over the Cartesian product of coordinates. If no, are there people that also think it would be useful?
2. Gathering together / unstacking of the data. My 3 line combo of ``concat``, ``set_index`` and ``unstack`` seems to do the trick but it seems a bit like over complication. Ideally I'd expect to have some mechanism that works similar to:
```python
inputs = cartesian_product(coordinates) # list similar to ``inps`` above
values = [function(inp) for inp in inputs] # or using ipypparallel map
xarray_data = ... # some empty xarray object
for inp, val in zip(inputs, values):
xarray_data[inp] = val
```
I asked how to generate product of coordinates from xarray object because I was expecting that I can create ``xarray_data`` as an empty object with all coordinates set and then fill it.
---
### Added comment
Having an empty, as filled with ``nan``s, object to start with would have this benefit that one could save partial results and have clean information what was already computed.","{""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-366740505,https://api.github.com/repos/pydata/xarray/issues/1914,366740505,MDEyOklzc3VlQ29tbWVudDM2Njc0MDUwNQ==,10928117,2018-02-19T16:20:15Z,2018-02-19T16:23:31Z,NONE,"Let me give a bit of a background what I would like to do:
1. Create an empty ``Dataset`` of coordinates I want to explore, i.e. two np.arrays ``x`` and ``y``, and two scalars ``a`` and ``b``.
2. Generate an list of the Cartesian product of all the coordinates, i.e. ``[ {'x': -1, 'y': 0, 'a': 1, 'b': 5}, ...]`` (data format doesn't really matter).
3. For each item of the iterator compute some function: ``f = f(x, y, a, b)``. In principle this function can be expensive to compute, therefore I'd compute it for each item of list from 2. separately on the cluster.
4. ""merge"" it all together into a single xarray object
In principle ``f`` should be allowed to return e.g. ``np.array``.
An related issue in [holoviews](https://github.com/ioam/holoviews/issues/2341#issuecomment-365925725) and the notebook with my initial [attempt](https://gitlab.kwant-project.org/qt/cookbook/blob/2f03d563342be6f5b85190faac24656457f1647f/xarray_holoviews_gridded.ipynb).
In the linked notebook I managed to achieve the goal however without starting with an ``xarray`` object containing coordinates. Also combining the data seems a bit inefficient as it takes more time than generating it for a larger datasets.","{""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/pull/924#issuecomment-286525479,https://api.github.com/repos/pydata/xarray/issues/924,286525479,MDEyOklzc3VlQ29tbWVudDI4NjUyNTQ3OQ==,10928117,2017-03-14T18:57:48Z,2017-03-14T18:57:48Z,NONE,@pwolfram Unfortunately nothing from my side yet.,"{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,168272291
https://github.com/pydata/xarray/issues/1265#issuecomment-280422799,https://api.github.com/repos/pydata/xarray/issues/1265,280422799,MDEyOklzc3VlQ29tbWVudDI4MDQyMjc5OQ==,10928117,2017-02-16T18:51:30Z,2017-02-16T18:51:30Z,NONE,"Hi, I tried to came with a bit more interesting but still simple example
```python
from itertools import product
import numpy as np
import pandas as pd
import holoviews as hv
hv.notebook_extension()
def energies(L, a):
k = np.pi * np.arange(1, L//a) / L
return {'exact': k**2, 'approx': 2*(1 - np.cos(k * a)) / a**2}
L = np.arange(10, 21, 2)
a = np.array([1, .5, .25])
data = []
for Li, ai in product(L, a):
output = dict(L=Li, a=ai)
output.update(**energies(Li, ai))
data.append(output)
df = pd.DataFrame(data)
hmap_data = {}
for n, row in df.iterrows():
key = row.L, row.a
val = (hv.Points((np.arange(len(row.exact)), row.exact), kdims=['n', 'E']) *
hv.Points((np.arange(len(row.approx)), row.approx), kdims=['n', 'E']))
hmap_data[key] = val
hv.HoloMap(hmap_data, kdims=['L', 'a']).select(n=(0, 20), E=(0, 20))
```
example is simple and don't include any serious simulation. I compare here energies of particle in 1D box vs what would came out from tight-binding simulation. Example is very simple but it captures situation that happens often when calculating spectrum of a finite system: for different system size we get different amount of energy levels.
That simple example is manageable without any pandas or xarray machinery but imagine real simulation made with [kwant](https://kwant-project.org/) for series of different input parameters (system dimensions, gate voltages, chemical potentials, etc...)","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,207283854
https://github.com/pydata/xarray/pull/924#issuecomment-280314275,https://api.github.com/repos/pydata/xarray/issues/924,280314275,MDEyOklzc3VlQ29tbWVudDI4MDMxNDI3NQ==,10928117,2017-02-16T12:09:49Z,2017-02-16T12:09:49Z,NONE,@shoyer I am considering contributing to this feature. Could you give me more details what needs to be done? ,"{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,168272291
https://github.com/pydata/xarray/issues/1265#issuecomment-279514589,https://api.github.com/repos/pydata/xarray/issues/1265,279514589,MDEyOklzc3VlQ29tbWVudDI3OTUxNDU4OQ==,10928117,2017-02-13T20:37:48Z,2017-02-13T20:37:48Z,NONE,I believe that this is a common problem in simulation of quantum mechanical problems. I will try to come with a bit more realistic / practical example that I hope will help with choosing the best solution.,"{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,207283854
https://github.com/pydata/xarray/pull/924#issuecomment-278944182,https://api.github.com/repos/pydata/xarray/issues/924,278944182,MDEyOklzc3VlQ29tbWVudDI3ODk0NDE4Mg==,10928117,2017-02-10T13:40:51Z,2017-02-10T13:40:51Z,NONE,"Hi, is there any active work on that feature? It would be really cool to have it.","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,168272291