2016-10-25 1 views
1

J'essaie de joindre un ensemble de valeurs d'un DataArray, à un autre. Ils doivent se joindre en fonction d'une coordonnée sans dimension du premier. Je pense que cela devrait être facile mais je n'arrive pas à me débrouiller.Joindre le long d'une dimension non-coordonnée dans xarray

Le premier tableau:

In [4]: primary=xr.DataArray(np.random.rand(4), dims=list('a')) 
    ...: primary.coords['group'] = (('a',), [0,0,1,1]) 
    ...: primary 
    ...: 
Out[4]: 
<xarray.DataArray (a: 4)> 
array([ 0.27772841, 0.06126117, 0.51753086, 0.35994987]) 
Coordinates: 
    * a  (a) int64 0 1 2 3 
    group (a) int64 0 0 1 1 

Le second tableau:

In [5]: secondary=xr.DataArray(np.random.rand(2), dims=['group'], coords={'group': [0,1]}) 
    ...: secondary 
    ...: 
Out[5]: 
<xarray.DataArray (group: 2)> 
array([ 0.75944366, 0.90325489]) 
Coordinates: 
    * group (group) int64 0 1 

Comment puis-je faire primary - secondary tels que les tableaux sont joints le long de la dimension group?

Merci

Répondre

1

Vous devez groupby la première mais pas appliquer une agrégation à elle:

In [6]: primary.groupby('group') - secondary 
Out[6]: 
<xarray.DataArray (a: 4)> 
array([-0.48171525, -0.69818249, -0.38572403, -0.54330502]) 
Coordinates: 
    * a  (a) int64 0 1 2 3 
    group (a) int64 0 0 1 1 
+1

Je suis heureux que vous soyez en mesure de comprendre cela vous :). – shoyer