def test_statistics_1(): a, w = get_data() _means = np.zeros((3, 1, 1, 6)) _weights = np.zeros((3, 1, 1, 6)) for i, j, k, l in itertools.product(range(a.shape[0]), range(a.shape[1]), range(a.shape[2]), range(a.shape[3])): _means[i, 0, 0, l] += w[i, j, k, l] * a[i, j, k, l] _weights[i, 0, 0, l] += w[i, j, k, l] _means /= _weights np.testing.assert_allclose(_means, mean(a, w, axis=(1, 2), keepdims=True), rtol=1e-07) _stds = np.zeros((3, 1, 1, 6)) for i, j, k, l in itertools.product(range(a.shape[0]), range(a.shape[1]), range(a.shape[2]), range(a.shape[3])): _stds[i, 0, 0, l] += w[i, j, k, l] * (a[i, j, k, l] - _means[i, 0, 0, l])**2 _stds = np.sqrt(_stds / _weights) np.testing.assert_allclose(_stds, std(a, w, axis=(1, 2), keepdims=True), rtol=1e-07) _values = np.zeros((3, 6, 4 * 5)) _weights = np.zeros((3, 6, 4 * 5)) for i, j, k, l in itertools.product(range(a.shape[0]), range(a.shape[1]), range(a.shape[2]), range(a.shape[3])): _values[i, l, j * a.shape[2] + k] = a[i, j, k, l] _weights[i, l, j * a.shape[2] + k] = w[i, j, k, l] def get_quantiles(q): _quantiles = np.zeros((3, 6)) for i in range(a.shape[0]): for l in range(a.shape[3]): isort = np.argsort(_values[i, l]) v = _values[i, l][isort] u = _weights[i, l][isort] U = u.cumsum() r = (U - 0.5 * u) / U[-1] for m in range(1, len(u)): if r[m - 1] <= q and r[m] > q: _quantiles[i, l] = v[m - 1] + (q - r[m - 1]) / ( r[m] - r[m - 1]) * (v[m] - v[m - 1]) break return _quantiles np.testing.assert_allclose(get_quantiles(0.1), quantile(a, 0.1, w, axis=(1, 2), keepdims=False), rtol=1e-07) np.testing.assert_allclose(get_quantiles(0.5), quantile(a, 0.5, w, axis=(1, 2), keepdims=False), rtol=1e-07) np.testing.assert_allclose(get_quantiles(0.9), quantile(a, 0.9, w, axis=(1, 2), keepdims=False), rtol=1e-07)
def test_std_shapes(): a, w = get_data() out = std(a) assert out.ndim == 0 out = std(a, w) assert out.ndim == 0 out = std(a, keepdims=True) assert out.shape == (1, 1, 1, 1) np.testing.assert_allclose(out.ravel()[0], std(a), rtol=1e-07) out = std(a, w, keepdims=True) assert out.shape == (1, 1, 1, 1) np.testing.assert_allclose(out.ravel()[0], std(a, w), rtol=1e-07) out = std(a, axis=1) assert out.shape == (3, 5, 6) out = std(a, w, axis=1) assert out.shape == (3, 5, 6) out = std(a, axis=(1, 2)) assert out.shape == (3, 6) np.testing.assert_allclose(out, std(a, np.ones_like(a), axis=(1, 2)), rtol=1e-07) out = std(a, w, axis=(1, 2)) assert out.shape == (3, 6) out = std(a, axis=(1, 2), keepdims=True) assert out.shape == (3, 1, 1, 6) np.testing.assert_allclose(out.ravel(), std(a, axis=(1, 2)).ravel(), rtol=1e-07) out = std(a, w, axis=(1, 2), keepdims=True) assert out.shape == (3, 1, 1, 6) np.testing.assert_allclose(out.ravel(), std(a, w, axis=(1, 2)).ravel(), rtol=1e-07)