@@ -1244,6 +1244,17 @@ def test_groupby_first_and_last(self):
1244
1244
expected = array # should be a no-op
1245
1245
self .assertDataArrayIdentical (expected , actual )
1246
1246
1247
+ def test_groupby_multidim (self ):
1248
+ array = DataArray ([[0 ,1 ],[2 ,3 ]],
1249
+ coords = {'lon' : (['ny' ,'nx' ], [[30 ,40 ],[40 ,50 ]] ),
1250
+ 'lat' : (['ny' ,'nx' ], [[10 ,10 ],[20 ,20 ]] ),},
1251
+ dims = ['ny' ,'nx' ])
1252
+ for dim , expected_sum in [
1253
+ ('lon' , DataArray ([0 , 3 , 3 ], coords = {'lon' : [30 ,40 ,50 ]})),
1254
+ ('lat' , DataArray ([1 ,5 ], coords = {'lat' : [10 ,20 ]}))]:
1255
+ actual_sum = array .groupby (dim ).sum ()
1256
+ self .assertDataArrayIdentical (expected_sum , actual_sum )
1257
+
1247
1258
def make_rolling_example_array (self ):
1248
1259
times = pd .date_range ('2000-01-01' , freq = '1D' , periods = 21 )
1249
1260
values = np .random .random ((21 , 4 ))
@@ -1792,29 +1803,29 @@ def test_full_like(self):
1792
1803
actual = _full_like (DataArray ([1 , 2 , 3 ]), fill_value = np .nan )
1793
1804
self .assertEqual (actual .dtype , np .float )
1794
1805
np .testing .assert_equal (actual .values , np .nan )
1795
-
1806
+
1796
1807
def test_dot (self ):
1797
1808
x = np .linspace (- 3 , 3 , 6 )
1798
1809
y = np .linspace (- 3 , 3 , 5 )
1799
- z = range (4 )
1810
+ z = range (4 )
1800
1811
da_vals = np .arange (6 * 5 * 4 ).reshape ((6 , 5 , 4 ))
1801
1812
da = DataArray (da_vals , coords = [x , y , z ], dims = ['x' , 'y' , 'z' ])
1802
-
1813
+
1803
1814
dm_vals = range (4 )
1804
1815
dm = DataArray (dm_vals , coords = [z ], dims = ['z' ])
1805
-
1816
+
1806
1817
# nd dot 1d
1807
1818
actual = da .dot (dm )
1808
1819
expected_vals = np .tensordot (da_vals , dm_vals , [2 , 0 ])
1809
1820
expected = DataArray (expected_vals , coords = [x , y ], dims = ['x' , 'y' ])
1810
1821
self .assertDataArrayEqual (expected , actual )
1811
-
1822
+
1812
1823
# all shared dims
1813
1824
actual = da .dot (da )
1814
1825
expected_vals = np .tensordot (da_vals , da_vals , axes = ([0 , 1 , 2 ], [0 , 1 , 2 ]))
1815
1826
expected = DataArray (expected_vals )
1816
1827
self .assertDataArrayEqual (expected , actual )
1817
-
1828
+
1818
1829
# multiple shared dims
1819
1830
dm_vals = np .arange (20 * 5 * 4 ).reshape ((20 , 5 , 4 ))
1820
1831
j = np .linspace (- 3 , 3 , 20 )
@@ -1823,7 +1834,7 @@ def test_dot(self):
1823
1834
expected_vals = np .tensordot (da_vals , dm_vals , axes = ([1 , 2 ], [1 , 2 ]))
1824
1835
expected = DataArray (expected_vals , coords = [x , j ], dims = ['x' , 'j' ])
1825
1836
self .assertDataArrayEqual (expected , actual )
1826
-
1837
+
1827
1838
with self .assertRaises (NotImplementedError ):
1828
1839
da .dot (dm .to_dataset (name = 'dm' ))
1829
1840
with self .assertRaises (TypeError ):
0 commit comments