public void NestedView_2D() { var data = new UnmanagedStorage(new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }); data.Reshape(2, 10); //>>> x = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) //>>> x = x.reshape(2, 10) //>>> x //array([[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], // [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]]) // return identical view var identical = data.GetView(":"); Assert.AreEqual(new Shape(2, 10), identical.Shape); //>>> x[:, 1:9] //array([[1, 2, 3, 4, 5, 6, 7, 8], // [1, 2, 3, 4, 5, 6, 7, 8]]) var view1 = identical.GetView(":,1:9"); Assert.AreEqual(new Shape(2, 8), view1.Shape); AssertAreEqual(new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8 }, view1.ToArray <int>()); //>>> x[:, 1:9][:,::- 2] //array([[8, 6, 4, 2], // [8, 6, 4, 2]]) var view2 = view1.GetView(":,::-2"); Assert.AreEqual(new Shape(2, 4), view2.Shape); AssertAreEqual(new int[] { 8, 6, 4, 2, 8, 6, 4, 2 }, view2.ToArray <int>()); //>>> x[:, 1:9][:,::- 2][:,::- 3] //array([[2, 8], // [2, 8]]) var view3 = view2.GetView(":,::-3"); Assert.AreEqual(new Shape(2, 2), view3.Shape); AssertAreEqual(new int[] { 2, 8, 2, 8 }, view3.ToArray <int>()); // all must see the same modifications, no matter if original or any view is modified // modify original data.SetData(ArraySlice.FromArray(new int[] { 0, -1, -2, -3, -4, -5, -6, -7, -8, -9, 0, -1, -2, -3, -4, -5, -6, -7, -8, -9 })); AssertAreEqual(new int[] { -1, -2, -3, -4, -5, -6, -7, -8, -1, -2, -3, -4, -5, -6, -7, -8 }, view1.ToArray <int>()); AssertAreEqual(new int[] { -8, -6, -4, -2, -8, -6, -4, -2 }, view2.ToArray <int>()); AssertAreEqual(new int[] { -2, -8, -2, -8 }, view3.ToArray <int>()); // modify views view1.SetValue(88, 0, 7); view1.SetValue(888, 1, 7); AssertAreEqual(new int[] { 0, -1, -2, -3, -4, -5, -6, -7, 88, -9, 0, -1, -2, -3, -4, -5, -6, -7, 888, -9 }, data.ToArray <int>()); AssertAreEqual(new int[] { -1, -2, -3, -4, -5, -6, -7, 88, -1, -2, -3, -4, -5, -6, -7, 888 }, view1.ToArray <int>()); AssertAreEqual(new int[] { 88, -6, -4, -2, 888, -6, -4, -2 }, view2.ToArray <int>()); AssertAreEqual(new int[] { -2, 88, -2, 888 }, view3.ToArray <int>()); view3.SetValue(22, 0, 0); view3.SetValue(222, 1, 0); AssertAreEqual(new int[] { 0, -1, 22, -3, -4, -5, -6, -7, 88, -9, 0, -1, 222, -3, -4, -5, -6, -7, 888, -9 }, data.ToArray <int>()); AssertAreEqual(new int[] { -1, 22, -3, -4, -5, -6, -7, 88, -1, 222, -3, -4, -5, -6, -7, 888 }, view1.ToArray <int>()); AssertAreEqual(new int[] { 88, -6, -4, 22, 888, -6, -4, 222 }, view2.ToArray <int>()); AssertAreEqual(new int[] { 22, 88, 222, 888 }, view3.ToArray <int>()); }
public void GetData_1D() { var data = new UnmanagedStorage(new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }); Assert.AreEqual(new Shape(10), data.Shape); // return identical view var view = data.GetView(":"); Assert.AreEqual(new Shape(10), view.Shape); AssertAreEqual(data.ToArray <int>(), view.ToArray <int>()); view = data.GetView("-77:77"); Assert.AreEqual(new Shape(10), view.Shape); AssertAreEqual(data.ToArray <int>(), view.ToArray <int>()); // return reduced view view = data.GetView("7:"); Assert.AreEqual(new Shape(3), view.Shape); AssertAreEqual(new int[] { 7, 8, 9 }, view.ToArray <int>()); view = data.GetView(":5"); Assert.AreEqual(new Shape(5), view.Shape); AssertAreEqual(new int[] { 0, 1, 2, 3, 4 }, view.ToArray <int>()); view = data.GetView("2:3"); Assert.AreEqual(new Shape(1), view.Shape); AssertAreEqual(new int[] { 2 }, view.ToArray <int>()); // return stepped view view = data.GetView("::2"); Assert.AreEqual(new Shape(5), view.Shape); AssertAreEqual(new int[] { 0, 2, 4, 6, 8 }, view.ToArray <int>()); view = data.GetView("::3"); Assert.AreEqual(new Shape(4), view.Shape); AssertAreEqual(new int[] { 0, 3, 6, 9 }, view.ToArray <int>()); view = data.GetView("::77"); Assert.AreEqual(new Shape(1), view.Shape); AssertAreEqual(new[] { 0 }, view.ToArray <int>()); view = data.GetView("-77:77:77"); Assert.AreEqual(new Shape(1), view.Shape); AssertAreEqual(new[] { 0 }, view.ToArray <int>()); // negative step! view = data.GetView("::-1"); Assert.AreEqual(new Shape(10), view.Shape); AssertAreEqual(data.ToArray <int>().OfType <int>().Reverse().ToArray(), view.ToArray <int>()); view = data.GetView("::-2"); Assert.AreEqual(new Shape(5), view.Shape); AssertAreEqual(new int[] { 9, 7, 5, 3, 1 }, view.ToArray <int>()); view = data.GetView("::-3"); Assert.AreEqual(new Shape(4), view.Shape); AssertAreEqual(new int[] { 9, 6, 3, 0 }, view.ToArray <int>()); view = data.GetView("::-77"); Assert.AreEqual(new Shape(1), view.Shape); AssertAreEqual(new[] { 9 }, view.ToArray <int>()); view = data.GetView("77:-77:-77"); Assert.AreEqual(new Shape(1), view.Shape); AssertAreEqual(new[] { 9 }, view.ToArray <int>()); }
public void NestedView_1D() { var data = new UnmanagedStorage(new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }); // return identical view var identical = data.GetView(":"); Assert.AreEqual(new Shape(10), identical.Shape); var view1 = identical.GetView("1:9"); Assert.AreEqual(new Shape(8), view1.Shape); AssertAreEqual(new int[] { 1, 2, 3, 4, 5, 6, 7, 8, }, view1.ToArray <int>()); var view2 = view1.GetView("::-2"); Assert.AreEqual(new Shape(4), view2.Shape); AssertAreEqual(new int[] { 8, 6, 4, 2, }, view2.ToArray <int>()); var view3 = view2.GetView("::-3"); Assert.AreEqual(new Shape(2), view3.Shape); AssertAreEqual(new int[] { 2, 8 }, view3.ToArray <int>()); // all must see the same modifications, no matter if original or any view is modified // modify original data.SetData(ArraySlice.FromArray(new int[] { 0, -1, -2, -3, -4, -5, -6, -7, -8, -9 })); var arr = view1.ToArray <int>(); AssertAreEqual(new int[] { -1, -2, -3, -4, -5, -6, -7, -8, }, view1.ToArray <int>()); AssertAreEqual(new int[] { -8, -6, -4, -2, }, view2.ToArray <int>()); AssertAreEqual(new int[] { -2, -8 }, view3.ToArray <int>()); // modify views view1.SetValue(88, 7); AssertAreEqual(new int[] { 0, -1, -2, -3, -4, -5, -6, -7, 88, -9 }, data.ToArray <int>()); AssertAreEqual(new int[] { -1, -2, -3, -4, -5, -6, -7, 88, }, view1.ToArray <int>()); AssertAreEqual(new int[] { 88, -6, -4, -2, }, view2.ToArray <int>()); AssertAreEqual(new int[] { -2, 88 }, view3.ToArray <int>()); view3.SetValue(22, 0); AssertAreEqual(new int[] { 0, -1, 22, -3, -4, -5, -6, -7, 88, -9 }, data.ToArray <int>()); AssertAreEqual(new int[] { -1, 22, -3, -4, -5, -6, -7, 88, }, view1.ToArray <int>()); AssertAreEqual(new int[] { 88, -6, -4, 22, }, view2.ToArray <int>()); AssertAreEqual(new int[] { 22, 88 }, view3.ToArray <int>()); }
public void Scalar_to_array() { var a = new UnmanagedStorage(17); AssertAreEqual(new int[] { 17 }, a.ToArray <int>()); }
public void GetData_2D() { //>>> x = np.arange(9).reshape(3, 3) //>>> x //array([[0, 1, 2], // [3, 4, 5], // [6, 7, 8]]) //>>> x[:] //array([[0, 1, 2], // [3, 4, 5], // [6, 7, 8]]) //>>> x[1:] //array([[3, 4, 5], // [6, 7, 8]]) //>>> x[1:,:] //array([[3, 4, 5], // [6, 7, 8]]) //>>> x[:, 1:] //array([[1, 2], // [4, 5], // [7, 8]]) //>>> x[1:2, 0:1] //array([[3]]) var data = new UnmanagedStorage(new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8 }); data.Reshape(3, 3); Assert.AreEqual(new Shape(3, 3), data.Shape); // return identical view var view = data.GetView(":"); Assert.AreEqual(new Shape(3, 3), view.Shape); AssertAreEqual(data.ToArray <int>(), view.ToArray <int>()); // return reduced view view = data.GetView("1:"); Assert.AreEqual(new Shape(2, 3), view.Shape); AssertAreEqual(new int[] { 3, 4, 5, 6, 7, 8 }, view.ToArray <int>()); view = data.GetView("1:,:"); Assert.AreEqual(new Shape(2, 3), view.Shape); AssertAreEqual(new int[] { 3, 4, 5, 6, 7, 8 }, view.ToArray <int>()); view = data.GetView(":,1:"); Assert.AreEqual(new Shape(3, 2), view.Shape); AssertAreEqual(new int[] { 1, 2, 4, 5, 7, 8 }, view.ToArray <int>()); view = data.GetView("1:2, 0:1"); Assert.AreEqual(new Shape(1, 1), view.Shape); AssertAreEqual(new int[] { 3 }, view.ToArray <int>()); // return stepped view //>>> x //array([[0, 1, 2], // [3, 4, 5], // [6, 7, 8]]) //>>> x[::2] //array([[0, 1, 2], // [6, 7, 8]]) //>>> x[::3] //array([[0, 1, 2]]) //>>> x[::- 1] //array([[6, 7, 8], // [3, 4, 5], // [0, 1, 2]]) //>>> x[::- 2] //array([[6, 7, 8], // [0, 1, 2]]) //>>> x[::- 3] //array([[6, 7, 8]]) view = data.GetView("::2"); Assert.AreEqual(new Shape(2, 3), view.Shape); AssertAreEqual(new int[] { 0, 1, 2, 6, 7, 8 }, view.ToArray <int>()); view = data.GetView("::3"); Assert.AreEqual(new Shape(1, 3), view.Shape); AssertAreEqual(new int[] { 0, 1, 2 }, view.ToArray <int>()); view = data.GetView("::-1"); Assert.AreEqual(new Shape(3, 3), view.Shape); AssertAreEqual(new int[] { 6, 7, 8, 3, 4, 5, 0, 1, 2, }, view.ToArray <int>()); view = data.GetView("::-2"); Assert.AreEqual(new Shape(2, 3), view.Shape); AssertAreEqual(new int[] { 6, 7, 8, 0, 1, 2, }, view.ToArray <int>()); view = data.GetView("::-3"); Assert.AreEqual(new Shape(1, 3), view.Shape); AssertAreEqual(new int[] { 6, 7, 8, }, view.ToArray <int>()); // N-Dim Stepping //>>> x[::2,::2] //array([[0, 2], // [6, 8]]) //>>> x[::- 1,::- 2] //array([[8, 6], // [5, 3], // [2, 0]]) view = data.GetView("::2, ::2"); Assert.AreEqual(new Shape(2, 2), view.Shape); AssertAreEqual(new int[] { 0, 2, 6, 8 }, view.ToArray <int>()); view = data.GetView("::-1, ::-2"); Assert.AreEqual(new Shape(3, 2), view.Shape); AssertAreEqual(new int[] { 8, 6, 5, 3, 2, 0 }, view.ToArray <int>()); }
public void Case10_Scalar() { var a = new UnmanagedStorage(17); AssertAreEqual(new int[] { 17 }, a.ToArray <int>()); }