using Microsoft.VisualStudio.TestTools.UnitTesting; using System; using System.Collections.Generic; using System.Linq; using System.Text; using Tensorflow; using Tensorflow.NumPy; namespace TensorFlowNET.UnitTest.NumPy { /// /// https://numpy.org/doc/stable/reference/routines.array-creation.html /// [TestClass] public class ArrayCreationTest : EagerModeTestBase { [TestMethod] public void empty_zeros_ones_full() { var empty = np.empty((2, 2)); var zeros = np.zeros((2, 2)); var ones = np.ones((2, 2)); var full = np.full((2, 2), 0.1f); Assert.AreEqual(np.float32, full.dtype); } [TestMethod] public void arange() { var x = np.arange(3); AssetSequenceEqual(new[] { 0, 1, 2 }, x.ToArray()); x = np.arange(3f); Assert.IsTrue(Equal(new float[] { 0, 1, 2 }, x.ToArray())); var y = np.arange(3, 7); AssetSequenceEqual(new[] { 3, 4, 5, 6 }, y.ToArray()); y = np.arange(3, 7, 2); AssetSequenceEqual(new[] { 3, 5 }, y.ToArray()); } [TestMethod] public void array() { var x = np.array(1, 2, 3); AssetSequenceEqual(new[] { 1, 2, 3 }, x.ToArray()); x = np.array(new[,] { { 1, 2 }, { 3, 4 }, { 5, 6 } }); AssetSequenceEqual(new[] { 1, 2, 3, 4, 5, 6 }, x.ToArray()); } [TestMethod] public void to_multi_dim_array() { var x1 = np.arange(12); var y1 = x1.ToMultiDimArray(); AssetSequenceEqual((int[])y1, x1.ToArray()); var x2 = np.arange(12).reshape((2, 6)); var y2 = (int[,])x2.ToMultiDimArray(); Assert.AreEqual(x2[0, 5], y2[0, 5]); var x3 = np.arange(12).reshape((2, 2, 3)); var y3 = (int[,,])x3.ToMultiDimArray(); Assert.AreEqual(x3[0, 1, 2], y3[0, 1, 2]); } [TestMethod] public void eye() { var x = np.eye(3, k: 1); Assert.IsTrue(Equal(new double[] { 0, 1, 0, 0, 0, 1, 0, 0, 0 }, x.ToArray())); } [TestMethod] public void linspace() { var x = np.linspace(2.0, 3.0, num: 5); Assert.IsTrue(Equal(new double[] { 2, 2.25, 2.5, 2.75, 3 }, x.ToArray())); x = np.linspace(2.0, 3.0, num: 5, endpoint: false); Assert.IsTrue(Equal(new double[] { 2, 2.2, 2.4, 2.6, 2.8 }, x.ToArray())); } [TestMethod] public void meshgrid() { var x = np.linspace(0, 1, num: 3); var y = np.linspace(0, 1, num: 2); var (xv, yv) = np.meshgrid(x, y); Assert.IsTrue(Equal(new double[] { 0, 0.5, 1, 0, 0.5, 1 }, xv.ToArray())); Assert.IsTrue(Equal(new double[] { 0, 0, 0, 1, 1, 1 }, yv.ToArray())); (xv, yv) = np.meshgrid(x, y, sparse: true); Assert.IsTrue(Equal(new double[] { 0, 0.5, 1 }, xv.ToArray())); AssetSequenceEqual(new long[] { 1, 3 }, xv.shape.dims); Assert.IsTrue(Equal(new double[] { 0, 1 }, yv.ToArray())); AssetSequenceEqual(new long[] { 2, 1 }, yv.shape.dims); } [TestMethod] public void meshgrid_same_ndim() { var (a, b) = np.meshgrid(np.arange(3), np.arange(3)); AssetSequenceEqual(a.ToArray(), new int[] { 0, 1, 2, 0, 1, 2, 0, 1, 2 }); AssetSequenceEqual(b.ToArray(), new int[] { 0, 0, 0, 1, 1, 1, 2, 2, 2 }); } [TestMethod] public void to_numpy_string() { var nd = np.arange(10 * 10 * 10 * 10).reshape((10, 10, 10, 10)); var str = NDArrayRender.ToString(nd); Assert.AreEqual("array([[[[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],", str.Substring(0, 40)); Assert.AreEqual("[9990, 9991, 9992, 9993, 9994, 9995, 9996, 9997, 9998, 9999]]]])", str.Substring(str.Length - 64)); } } }