public static double Area(NumSharp.NDArray pointSet) { int d = pointSet.size / 3; double area = 0; for (int i = 0; i < d - 1; i++) { area += pointSet[i, 0] * pointSet[i + 1, 1] - pointSet[i + 1, 0] * pointSet[i, 1]; } area += pointSet[d - 1, 0] * pointSet[0, 1] - pointSet[0, 0] * pointSet[d - 1, 1]; return(0.5 * Math.Abs(area)); }
public void SquaredDifference_1D() { // Calcute the gradient of (x1-x2)^2 // by Automatic Differentiation in Eager mode // Expected is 2*(abs(x1-x2)) Tensor x1 = new NumSharp.NDArray(new float[] { 1, 3, 5, 21, 19, 17 }); Tensor x2 = new NumSharp.NDArray(new float[] { 29, 27, 23, 7, 11, 13 }); float[] expected = new float[] { (29 - 1) * 2, (27 - 3) * 2, (23 - 5) * 2, (7 - 21) * 2, (11 - 19) * 2, (13 - 17) * 2 }; // Sanity check using (var tape = tf.GradientTape()) { tape.watch(x1); tape.watch(x2); var loss = tf.multiply((x1 - x2), (x1 - x2)); var result = tape.gradient(loss, x2); CollectionAssert.AreEqual(result.ToArray <float>(), expected); } // Actual test using (var tape = tf.GradientTape()) { tape.watch(x1); tape.watch(x2); var loss = tf.squared_difference(x1, x2); var result = tape.gradient(loss, x2); CollectionAssert.AreEqual(result.ToArray <float>(), expected); } }