Пример #1
0
 def test_calculate_normal_3d(self):
     test_1 = np.array([[1, 0, 0], [0, 1, 0]])
     out = calculate_normal(test_1)
     self.assertTrue((out != 0).any)
     self.assertTrue(self.arr_eq(np.matmul(test_1, out.T), np.array([0,
                                                                     0])))
     test_2 = np.array([[3, 9, 1], [-8, 22, 12]])
     out = calculate_normal(test_2)
     self.assertTrue((out != 0).any)
     self.assertTrue(self.arr_eq(np.matmul(test_2, out.T), np.array([0,
                                                                     0])))
Пример #2
0
 def test_calculate_normal_2d(self):
     test_1 = np.array([1, 2])
     out = calculate_normal(test_1)
     self.assertTrue((out != 0).any)
     self.assertEqual(np.dot(test_1, out), 0)
     test_2 = np.array([1000, -333])
     out = calculate_normal(test_2)
     self.assertTrue((out != 0).any)
     self.assertEqual(np.dot(test_2, out), 0)
     test_3 = np.array([[1, 20]])
     out = calculate_normal(test_3)
     self.assertTrue((out != 0).any)
     self.assertEqual(np.dot(test_3, out), 0)
Пример #3
0
                    continue
                yield np.array([x, y])
                yield np.array([-x, y])


if __name__ == "__main__":
    import aistats.utils as aiu
    dims = [1, 1, 1, 1, 1]
    en = IterEnumerator(dims)  #NaiveEnumerator([10, 4, 3])
    dist_normals, points = set(), 0  # 12150, 278k
    for point in en.generate_points():
        points += 1
        if points % 10000 == 0:
            print(
                f"Point n-tuples: {points}\nDist_points: {len(dist_normals)}")
        normal = aiu.calculate_normal(point)
        nmlzd = aiu.normalize_vector(normal)
        dist_normals.add(tuple(nmlzd))
        dist_normals.add(tuple(-nmlzd))
    #print(dist_normals)
    print(f"Point n-tuples: {points}\nDist_points: {len(dist_normals)}")

    print("NAIVE")
    en = NaiveEnumerator(dims)  # NaiveEnumerator([10, 4, 3])
    dist_normals2, points2 = set(), 0  # 12150, 278k
    for point in en.generate_points():
        points2 += 1
        if points2 % 10000 == 0:
            print(
                f"Point n-tuples: {points2}\nDist_normals: {len(dist_normals2)}"
            )
Пример #4
0
 def neighbour_normal(self) -> np.ndarray:
     neighbours = self.neighbour_matrix()
     normal = aiu.calculate_normal(neighbours)
     return aiu.normalize_vector(normal)
Пример #5
0
 def generate_normals(self):
     for points in self.enumerator.generate_points():
         normal = aiu.calculate_normal(points)
         yield aiu.normalize_vector(normal)