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/1094#issuecomment-259022083,https://api.github.com/repos/pydata/xarray/issues/1094,259022083,MDEyOklzc3VlQ29tbWVudDI1OTAyMjA4Mw==,1217238,2016-11-08T01:52:40Z,2016-11-08T01:52:40Z,MEMBER,"For unstructured meshes of points, pandas.MultiIndex is not the right abstraction. Suppose you have a (very long) list of sorted points `(x, y, z)` in a multi-index. You can efficiently query within fixed bounds along `x` by doing binary search. But for queries in `y` and `z`, you cannot do any better than looking through the entire list. Moreover, pandas.MultiIndex factorizes each level into unique values, which is a complete waste on an unstructured grid where few coordinate overlap. For unstructured meshes, you need something like a KDTree (see discussion in https://github.com/pydata/xarray/issues/475), with ideally with nearby points in space stored in contiguous array chunks. I would start with trying to get an in-memory KDTree working, and then switch to something out of core only when/if necessary. For example, SciPy's cKDTree can load 1e7 points in 3-dimensions in only a few seconds: ``` x = np.random.rand(int(1e7), 3) %time tree = scipy.spatial.cKDTree(x, leafsize=100) # CPU times: user 2.58 s, sys: 0 ns, total: 2.58 s # Wall time: 2.55 s ``` The might be good enough. ","{""total_count"": 1, ""+1"": 1, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,187873247