예제 #1
0
    def test_weighted_float(self):
        nan = float("nan")
        data = np.array([[0, 1, 1, 2, 0],
                         [1, 1, 1, nan, 1],
                         [0, 0, 3, nan, nan]], dtype=float)
        y = bn.stats(data, np.array([1, 2, 3], dtype=float))
        np.testing.assert_equal(y[:, 0], [0, 0, 1, 2, 0])
        np.testing.assert_equal(y[:, 1], [1, 1, 3, 2, 1])
        np.testing.assert_almost_equal(y[:, 2], [2/6, 0.5, 2, 2, 2/3])
        np.testing.assert_equal(y[:, 3], [0, 0, 0, 0, 0])
        np.testing.assert_equal(y[:, 4], [0, 0, 0, 5, 3])
        np.testing.assert_equal(y[:, 5], [6, 6, 6, 1, 3])

        y = bn.stats(data, np.array([1, 2, 3], dtype=float), True)
        np.testing.assert_equal(y[:, 0], [0, 0, 1, 2, 0])
        np.testing.assert_equal(y[:, 1], [1, 1, 3, 2, 1])
        np.testing.assert_almost_equal(y[:, 2], [2/6, 0.5, 2, 2, 2/3])
        np.testing.assert_almost_equal(
            y[:, 3], [(1/9 + 2 * 4/9 + 3 * 1/9) * 6 / 22,
                      0.25 * 6 * 6 / 22,
                      6 * 6 / 22,
                      0,
                      (4/9 + 2 * 1/9) * 3 / 4])
        np.testing.assert_equal(y[:, 4], [0, 0, 0, 5, 3])
        np.testing.assert_equal(y[:, 5], [6, 6, 6, 1, 3])
예제 #2
0
    def test_simple_float_allnan(self):
        nan = float("nan")
        data = np.array([[0, 1, 1, nan, 0],
                         [1, 1, 1, nan, 1],
                         [0, 0, 3, nan, nan]], dtype=float)
        y = bn.stats(data)
        np.testing.assert_equal(y[3, :],
            [float("inf"), float("-inf"), 0, 0, 3, 0])

        y = bn.stats(data, None, True)
        np.testing.assert_equal(y[3, :],
            [float("inf"), float("-inf"), 0, 0, 3, 0])
예제 #3
0
    def test_simple_float_allnan(self):
        nan = float("nan")
        data = np.array(
            [[0, 1, 1, nan, 0], [1, 1, 1, nan, 1], [0, 0, 3, nan, nan]],
            dtype=float)
        y = bn.stats(data)
        np.testing.assert_equal(
            y[3, :], [float("inf"), float("-inf"), 0, 0, 3, 0])

        y = bn.stats(data, None, True)
        np.testing.assert_equal(
            y[3, :], [float("inf"), float("-inf"), 0, 0, 3, 0])
예제 #4
0
    def test_int_1d(self):
        data = np.array([0, 1, 1, 2, 0])
        a_min, a_max, mean, var, nans, non_nans = bn.stats(data)
        self.assertEqual(a_min, 0)
        self.assertEqual(a_max, 2)
        self.assertAlmostEqual(mean, 4/5)
        self.assertEqual(var, 0)
        self.assertEqual(nans, 0)
        self.assertEqual(non_nans, 5)

        a_min, a_max, mean, var, nans, non_nans = bn.stats(data, None, True)
        self.assertEqual(a_min, 0)
        self.assertEqual(a_max, 2)
        self.assertAlmostEqual(mean, 4/5)
        self.assertAlmostEqual(var, (16 + 1 + 1 + 36 + 16) / 25 / 4)
        self.assertEqual(nans, 0)
        self.assertEqual(non_nans, 5)
예제 #5
0
    def test_float_1d(self):
        data = np.array([0, 1, float("nan"), 2, 0], dtype="float")
        a_min, a_max, mean, var, nans, non_nans = bn.stats(data)
        self.assertEqual(a_min, 0)
        self.assertEqual(a_max, 2)
        self.assertAlmostEqual(mean, 3/4)
        self.assertEqual(var, 0)
        self.assertEqual(nans, 1)
        self.assertEqual(non_nans, 4)

        a_min, a_max, mean, var, nans, non_nans = bn.stats(data, None, True)
        self.assertEqual(a_min, 0)
        self.assertEqual(a_max, 2)
        self.assertAlmostEqual(mean, 3/4)
        self.assertEqual(var, (9/16 + 1/16 + 25/16 + 9/16) / 3)
        self.assertEqual(nans, 1)
        self.assertEqual(non_nans, 4)
예제 #6
0
    def test_float_1d(self):
        data = np.array([0, 1, float("nan"), 2, 0], dtype="float")
        a_min, a_max, mean, var, nans, non_nans = bn.stats(data)
        self.assertEqual(a_min, 0)
        self.assertEqual(a_max, 2)
        self.assertAlmostEqual(mean, 3 / 4)
        self.assertEqual(var, 0)
        self.assertEqual(nans, 1)
        self.assertEqual(non_nans, 4)

        a_min, a_max, mean, var, nans, non_nans = bn.stats(data, None, True)
        self.assertEqual(a_min, 0)
        self.assertEqual(a_max, 2)
        self.assertAlmostEqual(mean, 3 / 4)
        self.assertEqual(var, (9 / 16 + 1 / 16 + 25 / 16 + 9 / 16) / 3)
        self.assertEqual(nans, 1)
        self.assertEqual(non_nans, 4)
예제 #7
0
    def test_int_1d(self):
        data = np.array([0, 1, 1, 2, 0])
        a_min, a_max, mean, var, nans, non_nans = bn.stats(data)
        self.assertEqual(a_min, 0)
        self.assertEqual(a_max, 2)
        self.assertAlmostEqual(mean, 4 / 5)
        self.assertEqual(var, 0)
        self.assertEqual(nans, 0)
        self.assertEqual(non_nans, 5)

        a_min, a_max, mean, var, nans, non_nans = bn.stats(data, None, True)
        self.assertEqual(a_min, 0)
        self.assertEqual(a_max, 2)
        self.assertAlmostEqual(mean, 4 / 5)
        self.assertAlmostEqual(var, (16 + 1 + 1 + 36 + 16) / 25 / 4)
        self.assertEqual(nans, 0)
        self.assertEqual(non_nans, 5)
 def test_coef_table_single(self):
     data = Table("titanic")
     learn = LogisticRegressionLearner()
     classifier = learn(data)
     coef_table = create_coef_table(classifier)
     self.assertEqual(1, len(bn.stats(coef_table.metas, None)))
     self.assertEqual(len(coef_table), len(classifier.domain.attributes) + 1)
     self.assertEqual(len(coef_table[0]), 1)
 def test_coef_table_multiple(self):
     data = Table("zoo")
     learn = LogisticRegressionLearner()
     classifier = learn(data)
     coef_table = create_coef_table(classifier)
     self.assertEqual(1, len(bn.stats(coef_table.metas, None)))
     self.assertEqual(len(coef_table), len(classifier.domain.attributes) + 1)
     self.assertEqual(len(coef_table[0]), len(classifier.domain.class_var.values))
예제 #10
0
 def test_coef_table_single(self):
     data = Table("titanic")
     learn = LogisticRegressionLearner()
     classifier = learn(data)
     coef_table = create_coef_table(classifier)
     self.assertEqual(1, len(bn.stats(coef_table.metas, None)))
     self.assertEqual(len(coef_table),
                      len(classifier.domain.attributes) + 1)
     self.assertEqual(len(coef_table[0]), 1)
예제 #11
0
 def test_coef_table_multiple(self):
     data = Table("zoo")
     learn = LogisticRegressionLearner()
     classifier = learn(data)
     coef_table = create_coef_table(classifier)
     self.assertEqual(1, len(bn.stats(coef_table.metas, None)))
     self.assertEqual(len(coef_table),
                      len(classifier.domain.attributes) + 1)
     self.assertEqual(len(coef_table[0]),
                      len(classifier.domain.class_var.values))
예제 #12
0
    def test_int_weight_1d(self):
        data = np.array([0, 1, 1, 2, 0])
        a_min, a_max, mean, var, nans, non_nans = \
            bn.stats(data, [1, 2, 3, 4, 5])
        self.assertEqual(a_min, 0)
        self.assertEqual(a_max, 2)
        self.assertAlmostEqual(mean, 13/15)
        self.assertEqual(var, 0)
        self.assertEqual(nans, 0)
        self.assertEqual(non_nans, 15)

        a_min, a_max, mean, var, nans, non_nans = \
            bn.stats(data, [1, 2, 3, 4, 5], True)
        self.assertEqual(a_min, 0)
        self.assertEqual(a_max, 2)
        self.assertAlmostEqual(mean, 13/15)
        self.assertEqual(var, (169 + 2*4 + 3*4 + 4*17**2 + 5*169) / 225 * 15/170)
        self.assertEqual(nans, 0)
        self.assertEqual(non_nans, 15)
예제 #13
0
    def test_simple_int(self):
        data = np.array([[0, 1, 1, 2, 0],
                         [1, 1, 1, 0, 0],
                         [0, 0, 3, 0, 0]], dtype=int)
        y = bn.stats(data)
        np.testing.assert_equal(y[:, 0], [0, 0, 1, 0, 0])
        np.testing.assert_equal(y[:, 1], [1, 1, 3, 2, 0])
        np.testing.assert_almost_equal(y[:, 2], [1/3, 2/3, 5/3, 2/3, 0])
        np.testing.assert_equal(y[:, 3], [0, 0, 0, 0, 0])
        np.testing.assert_equal(y[:, 4], [0, 0, 0, 0, 0])
        np.testing.assert_equal(y[:, 5], [3, 3, 3, 3, 3])

        y = bn.stats(data, None, True)
        np.testing.assert_equal(y[:, 0], [0, 0, 1, 0, 0])
        np.testing.assert_equal(y[:, 1], [1, 1, 3, 2, 0])
        np.testing.assert_almost_equal(y[:, 2], [1/3, 2/3, 5/3, 2/3, 0])
        np.testing.assert_almost_equal(y[:, 3], [1/3, 1/3, 4/3, 4/3, 0])
        np.testing.assert_equal(y[:, 4], [0, 0, 0, 0, 0])
        np.testing.assert_equal(y[:, 5], [3, 3, 3, 3, 3])
예제 #14
0
    def test_float_weight_1d(self):
        data = np.array([0, 1, float("nan"), 2, 0], dtype="float")
        a_min, a_max, mean, var, nans, non_nans = \
            bn.stats(data, [1, 2, 3, 4, 5])
        self.assertEqual(a_min, 0)
        self.assertEqual(a_max, 2)
        self.assertAlmostEqual(mean, 10/12)
        self.assertEqual(var, 0)
        self.assertEqual(nans, 3)
        self.assertEqual(non_nans, 12)

        a_min, a_max, mean, var, nans, non_nans = \
            bn.stats(data, [1, 2, 3, 4, 5], True)
        self.assertEqual(a_min, 0)
        self.assertEqual(a_max, 2)
        self.assertAlmostEqual(mean, 10/12)
        self.assertAlmostEqual(var, (100 + 2*4 + 4*196 + 5*100) / 144 * 12/98)
        self.assertEqual(nans, 3)
        self.assertEqual(non_nans, 12)
예제 #15
0
    def test_sparse_float(self):
        data = np.array([1, 1, 2, 2, 1, 3], dtype=float)
        indptr = [0, 3, 4, 6]
        indices = [0, 1, 2, 0, 1, 2]
        a = sp.csr_matrix((data, indices, indptr), shape=(3, 4))
        y = bn.stats(a)
        np.testing.assert_equal(y[:, 0], [1, 1, 2, float("inf")])
        np.testing.assert_equal(y[:, 1], [2, 1, 3, float("-inf")])
        np.testing.assert_almost_equal(y[:, 2], [1.5, 1, 2.5, 0])
        np.testing.assert_equal(y[:, 3], [0, 0, 0, 0])
        np.testing.assert_equal(y[:, 4], [1, 1, 1, 3])
        np.testing.assert_equal(y[:, 5], [2, 2, 2, 0])

        y = bn.stats(a, None, True)
        np.testing.assert_equal(y[:, 0], [1, 1, 2, float("inf")])
        np.testing.assert_equal(y[:, 1], [2, 1, 3, float("-inf")])
        np.testing.assert_almost_equal(y[:, 2], [1.5, 1, 2.5, 0])
        np.testing.assert_almost_equal(y[:, 3], [0.5, 0, 0.5, 0])
        np.testing.assert_equal(y[:, 4], [1, 1, 1, 3])
        np.testing.assert_equal(y[:, 5], [2, 2, 2, 0])
예제 #16
0
    def test_simple_float(self):
        nan = float("nan")
        data = np.array([[0, 1, 1, 2, 0],
                         [1, 1, 1, nan, 1],
                         [0, 0, 3, nan, nan]], dtype=float)
        y = bn.stats(data)
        np.testing.assert_equal(y[:, 0], [0, 0, 1, 2, 0])
        np.testing.assert_equal(y[:, 1], [1, 1, 3, 2, 1])
        np.testing.assert_almost_equal(y[:, 2], [1/3, 2/3, 5/3, 2, 0.5])
        np.testing.assert_equal(y[:, 3], [0, 0, 0, 0, 0])
        np.testing.assert_equal(y[:, 4], [0, 0, 0, 2, 1])
        np.testing.assert_equal(y[:, 5], [3, 3, 3, 1, 2])

        y = bn.stats(data, None, True)
        np.testing.assert_equal(y[:, 0], [0, 0, 1, 2, 0])
        np.testing.assert_equal(y[:, 1], [1, 1, 3, 2, 1])
        np.testing.assert_almost_equal(y[:, 2], [1/3, 2/3, 5/3, 2, 0.5])
        np.testing.assert_almost_equal(y[:, 3], [1/3, 1/3, 4/3, 0, 1/2])
        np.testing.assert_equal(y[:, 4], [0, 0, 0, 2, 1])
        np.testing.assert_equal(y[:, 5], [3, 3, 3, 1, 2])
예제 #17
0
    def test_sparse_float(self):
        data = np.array([1, 1, 2, 2, 1, 3], dtype=float)
        indptr = [0, 3, 4, 6]
        indices = [0, 1, 2, 0, 1, 2]
        a = sp.csr_matrix((data, indices, indptr), shape=(3, 4))
        y = bn.stats(a)
        np.testing.assert_equal(y[:, 0], [1, 1, 2, float("inf")])
        np.testing.assert_equal(y[:, 1], [2, 1, 3, float("-inf")])
        np.testing.assert_almost_equal(y[:, 2], [1.5, 1, 2.5, 0])
        np.testing.assert_equal(y[:, 3], [0, 0, 0, 0])
        np.testing.assert_equal(y[:, 4], [1, 1, 1, 3])
        np.testing.assert_equal(y[:, 5], [2, 2, 2, 0])

        y = bn.stats(a, None, True)
        np.testing.assert_equal(y[:, 0], [1, 1, 2, float("inf")])
        np.testing.assert_equal(y[:, 1], [2, 1, 3, float("-inf")])
        np.testing.assert_almost_equal(y[:, 2], [1.5, 1, 2.5, 0])
        np.testing.assert_almost_equal(y[:, 3], [0.5, 0, 0.5, 0])
        np.testing.assert_equal(y[:, 4], [1, 1, 1, 3])
        np.testing.assert_equal(y[:, 5], [2, 2, 2, 0])
예제 #18
0
    def test_int_weight_1d(self):
        data = np.array([0, 1, 1, 2, 0])
        a_min, a_max, mean, var, nans, non_nans = \
            bn.stats(data, [1, 2, 3, 4, 5])
        self.assertEqual(a_min, 0)
        self.assertEqual(a_max, 2)
        self.assertAlmostEqual(mean, 13 / 15)
        self.assertEqual(var, 0)
        self.assertEqual(nans, 0)
        self.assertEqual(non_nans, 15)

        a_min, a_max, mean, var, nans, non_nans = \
            bn.stats(data, [1, 2, 3, 4, 5], True)
        self.assertEqual(a_min, 0)
        self.assertEqual(a_max, 2)
        self.assertAlmostEqual(mean, 13 / 15)
        self.assertEqual(var, (169 + 2 * 4 + 3 * 4 + 4 * 17**2 + 5 * 169) /
                         225 * 15 / 170)
        self.assertEqual(nans, 0)
        self.assertEqual(non_nans, 15)
예제 #19
0
    def test_float_weight_1d(self):
        data = np.array([0, 1, float("nan"), 2, 0], dtype="float")
        a_min, a_max, mean, var, nans, non_nans = \
            bn.stats(data, [1, 2, 3, 4, 5])
        self.assertEqual(a_min, 0)
        self.assertEqual(a_max, 2)
        self.assertAlmostEqual(mean, 10 / 12)
        self.assertEqual(var, 0)
        self.assertEqual(nans, 3)
        self.assertEqual(non_nans, 12)

        a_min, a_max, mean, var, nans, non_nans = \
            bn.stats(data, [1, 2, 3, 4, 5], True)
        self.assertEqual(a_min, 0)
        self.assertEqual(a_max, 2)
        self.assertAlmostEqual(mean, 10 / 12)
        self.assertAlmostEqual(var, (100 + 2 * 4 + 4 * 196 + 5 * 100) / 144 *
                               12 / 98)
        self.assertEqual(nans, 3)
        self.assertEqual(non_nans, 12)
예제 #20
0
    def test_simple_int(self):
        data = np.array([[0, 1, 1, 2, 0], [1, 1, 1, 0, 0], [0, 0, 3, 0, 0]],
                        dtype=int)
        y = bn.stats(data)
        np.testing.assert_equal(y[:, 0], [0, 0, 1, 0, 0])
        np.testing.assert_equal(y[:, 1], [1, 1, 3, 2, 0])
        np.testing.assert_almost_equal(y[:, 2],
                                       [1 / 3, 2 / 3, 5 / 3, 2 / 3, 0])
        np.testing.assert_equal(y[:, 3], [0, 0, 0, 0, 0])
        np.testing.assert_equal(y[:, 4], [0, 0, 0, 0, 0])
        np.testing.assert_equal(y[:, 5], [3, 3, 3, 3, 3])

        y = bn.stats(data, None, True)
        np.testing.assert_equal(y[:, 0], [0, 0, 1, 0, 0])
        np.testing.assert_equal(y[:, 1], [1, 1, 3, 2, 0])
        np.testing.assert_almost_equal(y[:, 2],
                                       [1 / 3, 2 / 3, 5 / 3, 2 / 3, 0])
        np.testing.assert_almost_equal(y[:, 3],
                                       [1 / 3, 1 / 3, 4 / 3, 4 / 3, 0])
        np.testing.assert_equal(y[:, 4], [0, 0, 0, 0, 0])
        np.testing.assert_equal(y[:, 5], [3, 3, 3, 3, 3])
예제 #21
0
    def test_simple_float(self):
        nan = float("nan")
        data = np.array(
            [[0, 1, 1, 2, 0], [1, 1, 1, nan, 1], [0, 0, 3, nan, nan]],
            dtype=float)
        y = bn.stats(data)
        np.testing.assert_equal(y[:, 0], [0, 0, 1, 2, 0])
        np.testing.assert_equal(y[:, 1], [1, 1, 3, 2, 1])
        np.testing.assert_almost_equal(y[:, 2], [1 / 3, 2 / 3, 5 / 3, 2, 0.5])
        np.testing.assert_equal(y[:, 3], [0, 0, 0, 0, 0])
        np.testing.assert_equal(y[:, 4], [0, 0, 0, 2, 1])
        np.testing.assert_equal(y[:, 5], [3, 3, 3, 1, 2])

        y = bn.stats(data, None, True)
        np.testing.assert_equal(y[:, 0], [0, 0, 1, 2, 0])
        np.testing.assert_equal(y[:, 1], [1, 1, 3, 2, 1])
        np.testing.assert_almost_equal(y[:, 2], [1 / 3, 2 / 3, 5 / 3, 2, 0.5])
        np.testing.assert_almost_equal(y[:, 3],
                                       [1 / 3, 1 / 3, 4 / 3, 0, 1 / 2])
        np.testing.assert_equal(y[:, 4], [0, 0, 0, 2, 1])
        np.testing.assert_equal(y[:, 5], [3, 3, 3, 1, 2])
예제 #22
0
    def test_sparse_weight_float(self):
        data = np.array([1, 1, 2, 2, 1, 3], dtype=float)
        indptr = [0, 3, 4, 6]
        indices = [0, 1, 2, 0, 1, 2]
        a = sp.csr_matrix((data, indices, indptr), shape=(3, 4))
        y = bn.stats(a, [1, 2, 3])
        np.testing.assert_equal(y[:, 0], [1, 1, 2, float("inf")])
        np.testing.assert_equal(y[:, 1], [2, 1, 3, float("-inf")])
        np.testing.assert_almost_equal(y[:, 2], [5/3, 1, 2.75, 0])
        np.testing.assert_equal(y[:, 3], [0, 0, 0, 0])
        np.testing.assert_equal(y[:, 4], [3, 2, 2, 6])
        np.testing.assert_equal(y[:, 5], [3, 4, 4, 0])

        y = bn.stats(a, [1, 2, 3], True)
        np.testing.assert_equal(y[:, 0], [1, 1, 2, float("inf")])
        np.testing.assert_equal(y[:, 1], [2, 1, 3, float("-inf")])
        np.testing.assert_almost_equal(y[:, 2], [5/3, 1, 2.75, 0])
        np.testing.assert_almost_equal(y[:, 3], [(4/9 + 2 * 1/9) * 3/4, 0,
                                                 (9/16 + 3 * 1/16) * 4/6, 0])
        np.testing.assert_equal(y[:, 4], [3, 2, 2, 6])
        np.testing.assert_equal(y[:, 5], [3, 4, 4, 0])
예제 #23
0
 def _compute_basic_stats(self,
                          columns=None,
                          include_metas=False,
                          compute_variance=False):
     if compute_variance:
         raise NotImplementedError("computation of variance is "
                                   "not implemented yet")
     W = self.W if self.has_weights() else None
     rr = []
     if not columns:
         if self.domain.attributes:
             rr.append(bn.stats(self.X, W))
         if self.domain.class_vars:
             rr.append(bn.stats(self.Y, W))
         if include_metas and self.domain.metas:
             rr.append(bn.stats(self.metas, W))
         stats = np.vstack(tuple(rr))
     else:
         columns = [self.domain.index(c) for c in columns]
         nattrs = len(self.domain.attributes)
         Xs = any(0 <= c < nattrs for c in columns) and bn.stats(self.X, W)
         Ys = any(c >= nattrs for c in columns) and bn.stats(self.Y, W)
         ms = any(c < 0 for c in columns) and bn.stats(self.metas, W)
         stats = []
         for column in columns:
             if 0 <= column < nattrs:
                 stats.append(Xs[column, :])
             elif column >= nattrs:
                 stats.append(Ys[column - nattrs, :])
             else:
                 stats.append(ms[-1 - column])
     return stats
예제 #24
0
파일: table.py 프로젝트: r0k3/orange3
 def _compute_basic_stats(self, columns=None,
                          include_metas=False, compute_variance=False):
     if compute_variance:
         raise NotImplementedError("computation of variance is "
                                   "not implemented yet")
     W = self.W if self.has_weights() else None
     rr = []
     if not columns:
         if self.domain.attributes:
             rr.append(bn.stats(self.X, W))
         if self.domain.class_vars:
             rr.append(bn.stats(self.Y, W))
         if include_metas and self.domain.metas:
             rr.append(bn.stats(self.metas, W))
         stats = np.vstack(tuple(rr))
     else:
         columns = [self.domain.index(c) for c in columns]
         nattrs = len(self.domain.attributes)
         Xs = any(0 <= c < nattrs for c in columns) and bn.stats(self.X, W)
         Ys = any(c >= nattrs for c in columns) and bn.stats(self.Y, W)
         ms = any(c < 0 for c in columns) and bn.stats(self.metas, W)
         stats = []
         for column in columns:
             if 0 <= column < nattrs:
                 stats.append(Xs[column, :])
             elif column >= nattrs:
                 stats.append(Ys[column - nattrs, :])
             else:
                 stats.append(ms[-1 - column])
     return stats
예제 #25
0
    def test_weighted_int(self):
        data = np.array([[0, 1, 1, 2, 1], [1, 1, 1, 0, 1], [0, 0, 3, 0, 0]],
                        dtype=int)
        y = bn.stats(data, np.array([1, 2, 3], dtype=float))
        np.testing.assert_equal(y[:, 0], [0, 0, 1, 0, 0])
        np.testing.assert_equal(y[:, 1], [1, 1, 3, 2, 1])
        np.testing.assert_almost_equal(y[:, 2], [2 / 6, 0.5, 2, 2 / 6, 0.5])
        np.testing.assert_equal(y[:, 3], [0, 0, 0, 0, 0])
        np.testing.assert_equal(y[:, 4], [0, 0, 0, 0, 0])
        np.testing.assert_equal(y[:, 5], [6, 6, 6, 6, 6])

        y = bn.stats(data, np.array([1, 2, 3], dtype=float), True)
        np.testing.assert_equal(y[:, 0], [0, 0, 1, 0, 0])
        np.testing.assert_equal(y[:, 1], [1, 1, 3, 2, 1])
        np.testing.assert_almost_equal(y[:, 2], [2 / 6, 0.5, 2, 2 / 6, 0.5])
        np.testing.assert_almost_equal(
            y[:, 3],
            [(1 / 9 + 2 * 4 / 9 + 3 * 1 / 9) * 6 / 22, 0.25 * 6 * 6 / 22,
             6 * 6 / 22,
             (25 / 9 + 2 * 1 / 9 + 3 * 1 / 9) * 6 / 22, 0.25 * 6 * 6 / 22])
        np.testing.assert_equal(y[:, 4], [0, 0, 0, 0, 0])
        np.testing.assert_equal(y[:, 5], [6, 6, 6, 6, 6])
예제 #26
0
    def test_sparse_weight_float(self):
        data = np.array([1, 1, 2, 2, 1, 3], dtype=float)
        indptr = [0, 3, 4, 6]
        indices = [0, 1, 2, 0, 1, 2]
        a = sp.csr_matrix((data, indices, indptr), shape=(3, 4))
        y = bn.stats(a, [1, 2, 3])
        np.testing.assert_equal(y[:, 0], [1, 1, 2, float("inf")])
        np.testing.assert_equal(y[:, 1], [2, 1, 3, float("-inf")])
        np.testing.assert_almost_equal(y[:, 2], [5 / 3, 1, 2.75, 0])
        np.testing.assert_equal(y[:, 3], [0, 0, 0, 0])
        np.testing.assert_equal(y[:, 4], [3, 2, 2, 6])
        np.testing.assert_equal(y[:, 5], [3, 4, 4, 0])

        y = bn.stats(a, [1, 2, 3], True)
        np.testing.assert_equal(y[:, 0], [1, 1, 2, float("inf")])
        np.testing.assert_equal(y[:, 1], [2, 1, 3, float("-inf")])
        np.testing.assert_almost_equal(y[:, 2], [5 / 3, 1, 2.75, 0])
        np.testing.assert_almost_equal(y[:, 3],
                                       [(4 / 9 + 2 * 1 / 9) * 3 / 4, 0,
                                        (9 / 16 + 3 * 1 / 16) * 4 / 6, 0])
        np.testing.assert_equal(y[:, 4], [3, 2, 2, 6])
        np.testing.assert_equal(y[:, 5], [3, 4, 4, 0])
예제 #27
0
    def test_weighted_float(self):
        nan = float("nan")
        data = np.array(
            [[0, 1, 1, 2, 0], [1, 1, 1, nan, 1], [0, 0, 3, nan, nan]],
            dtype=float)
        y = bn.stats(data, np.array([1, 2, 3], dtype=float))
        np.testing.assert_equal(y[:, 0], [0, 0, 1, 2, 0])
        np.testing.assert_equal(y[:, 1], [1, 1, 3, 2, 1])
        np.testing.assert_almost_equal(y[:, 2], [2 / 6, 0.5, 2, 2, 2 / 3])
        np.testing.assert_equal(y[:, 3], [0, 0, 0, 0, 0])
        np.testing.assert_equal(y[:, 4], [0, 0, 0, 5, 3])
        np.testing.assert_equal(y[:, 5], [6, 6, 6, 1, 3])

        y = bn.stats(data, np.array([1, 2, 3], dtype=float), True)
        np.testing.assert_equal(y[:, 0], [0, 0, 1, 2, 0])
        np.testing.assert_equal(y[:, 1], [1, 1, 3, 2, 1])
        np.testing.assert_almost_equal(y[:, 2], [2 / 6, 0.5, 2, 2, 2 / 3])
        np.testing.assert_almost_equal(y[:, 3],
                                       [(1 / 9 + 2 * 4 / 9 + 3 * 1 / 9) * 6 /
                                        22, 0.25 * 6 * 6 / 22, 6 * 6 / 22, 0,
                                        (4 / 9 + 2 * 1 / 9) * 3 / 4])
        np.testing.assert_equal(y[:, 4], [0, 0, 0, 5, 3])
        np.testing.assert_equal(y[:, 5], [6, 6, 6, 1, 3])
예제 #28
0
    def test_weighted_int(self):
        data = np.array([[0, 1, 1, 2, 1],
                         [1, 1, 1, 0, 1],
                         [0, 0, 3, 0, 0]], dtype=int)
        y = bn.stats(data, np.array([1, 2, 3], dtype=float))
        np.testing.assert_equal(y[:, 0], [0, 0, 1, 0, 0])
        np.testing.assert_equal(y[:, 1], [1, 1, 3, 2, 1])
        np.testing.assert_almost_equal(y[:, 2], [2/6, 0.5, 2, 2/6, 0.5])
        np.testing.assert_equal(y[:, 3], [0, 0, 0, 0, 0])
        np.testing.assert_equal(y[:, 4], [0, 0, 0, 0, 0])
        np.testing.assert_equal(y[:, 5], [6, 6, 6, 6, 6])

        y = bn.stats(data, np.array([1, 2, 3], dtype=float), True)
        np.testing.assert_equal(y[:, 0], [0, 0, 1, 0, 0])
        np.testing.assert_equal(y[:, 1], [1, 1, 3, 2, 1])
        np.testing.assert_almost_equal(y[:, 2], [2/6, 0.5, 2, 2/6, 0.5])
        np.testing.assert_almost_equal(
            y[:, 3], [(1/9 + 2 * 4/9 + 3 * 1/9) * 6 / 22,
                      0.25 * 6 * 6 / 22,
                      6 * 6 / 22,
                      (25/9 + 2 * 1/9 + 3 * 1/9) * 6 / 22,
                      0.25 * 6 * 6 / 22])
        np.testing.assert_equal(y[:, 4], [0, 0, 0, 0, 0])
        np.testing.assert_equal(y[:, 5], [6, 6, 6, 6, 6])