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])))
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)
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)}" )
def neighbour_normal(self) -> np.ndarray: neighbours = self.neighbour_matrix() normal = aiu.calculate_normal(neighbours) return aiu.normalize_vector(normal)
def generate_normals(self): for points in self.enumerator.generate_points(): normal = aiu.calculate_normal(points) yield aiu.normalize_vector(normal)