Exemple #1
0
    def test_calculate(self):
        ma = MovingWindow()
        np.random.seed(1)
        values = np.ma.array(np.random.rand(10),
                             dtype=float).reshape(1, -1, 1, 1, 1)
        k = 5
        ret = ma.calculate(values, k=k, mode='same', operation='mean')

        self.assertEqual(ret.shape, values.shape)
        desired = [[[[[0.37915362432069233]]], [[[0.3599483613984792]]],
                    [[[0.317309867282206]]], [[[0.2523731852954507]]],
                    [[[0.14556032888255327]]], [[[0.21464959932769387]]],
                    [[[0.23353657964745986]]], [[[0.31194874828470864]]],
                    [[[0.3668512866636864]]], [[[0.4270483117590249]]]]]
        desired = np.array(desired)
        self.assertNumpyAllClose(ret, desired)
        ret = ret.squeeze()
        values = values.squeeze()
        self.assertEqual(ret[4], np.mean(values[2:7]))
Exemple #2
0
    def test_execute(self):
        field = self.get_field(month_count=1, with_value=True)
        field = field.get_field_slice({'time': slice(0, 4)})
        field['tmax'].get_value()[:] = 1

        mask = field['tmax'].get_mask(create=True)
        mask[:, :, :, 1, 1] = True
        field['tmax'].set_mask(mask)

        for mode in ['same', 'valid']:
            for operation in ('mean', 'min', 'max', 'median', 'var', 'std'):
                parms = {'k': 3, 'mode': mode, 'operation': operation}
                ma = MovingWindow(field=field, parms=parms)
                vc = ma.execute()
                if mode == 'same':
                    self.assertEqual(vc['moving_window'].get_value().shape,
                                     field['tmax'].shape)
                else:
                    actual_mask = vc['moving_window'].get_mask()
                    self.assertTrue(np.all(actual_mask[:, 0, :, :, :]))
                    self.assertTrue(np.all(actual_mask[:, -1, :, :, :]))
                    self.assertEqual(vc['moving_window'].get_value().shape,
                                     (2, 4, 2, 3, 4))