Esempio n. 1
0
        public void FromMultiDimArray(Array dotNetArray)
        {
            if (dotNetArray.GetType().GetElementType().IsArray)
            {
                throw new Exception("Jagged arrays are not allowed here!");
            }

            int[] dims = new int[dotNetArray.Rank];

            for (int idx = 0; idx < dims.Length; idx++)
            {
                dims[idx] = dotNetArray.GetLength(idx);
            }

            Storage = new NDStorage();
            Storage.Allocate(dotNetArray.GetType().GetElementType(), new Shape(dims));

            Array internalStrg = Storage.GetData();

            var pufferShape = new Shape(dims);

            pufferShape.ChangeTensorLayout();

            int[]  idxDims  = null;
            object valueIdx = null;

            for (int idx = 0; idx < Storage.Shape.Size; idx++)
            {
                idxDims  = pufferShape.GetDimIndexOutShape(idx);
                valueIdx = dotNetArray.GetValue(pufferShape.GetDimIndexOutShape(idx));
                internalStrg.SetValue(valueIdx, Storage.Shape.GetIndexInShape(idxDims));
            }
        }
Esempio n. 2
0
        //[TestMethod]
        public void CheckChangeTensorLayout2D()
        {
            var strg2DCpy = (NDStorage)strg2D.Clone();

            Assert.IsTrue(Enumerable.SequenceEqual(strg2DCpy.Shape.Dimensions, new int[] { 3, 3 }));
            Assert.IsTrue(Enumerable.SequenceEqual(strg2DCpy.GetData <Int64>(), new Int64[] { 0, 3, 6, 1, 4, 7, 2, 5, 8 }));

            Assert.IsTrue(Enumerable.SequenceEqual(strg2DCpy.Shape.Dimensions, new int[] { 3, 3 }));
            Assert.IsTrue(Enumerable.SequenceEqual(strg2DCpy.GetData <Int64>(), strg2D.GetData <Int64>()));

            strg2DCpy = (NDStorage)strg2DNonFull.Clone();

            Assert.IsTrue(Enumerable.SequenceEqual(strg2DCpy.Shape.Dimensions, new int[] { 5, 2 }));
            Assert.IsTrue(Enumerable.SequenceEqual(strg2DCpy.GetData <Int64>(), new Int64[] { 0, 5, 1, 6, 2, 7, 3, 8, 4, 9 }));

            Assert.IsTrue(Enumerable.SequenceEqual(strg2DCpy.Shape.Dimensions, new int[] { 5, 2 }));
            Assert.IsTrue(Enumerable.SequenceEqual(strg2DCpy.GetData <Int64>(), strg2DNonFull.GetData <Int64>()));

            strg2DCpy = new NDStorage(typeof(Int64));
            strg2DCpy.Allocate(new Shape(5, 2));

            strg2DCpy.SetData(strg2DNonFull.GetData());

            Assert.IsTrue(Enumerable.SequenceEqual(strg2DCpy.GetData <Int64>(), new Int64[] { 0, 2, 4, 6, 8, 1, 3, 5, 7, 9 }));
        }
Esempio n. 3
0
        public void IndexingCheck()
        {
            var element1D = strg1D.GetData <double>(0);

            Assert.IsTrue(element1D == 0);
            for (int idx = 1; idx < 10; idx++)
            {
                element1D = strg1D.GetData <double>(idx);
                Assert.IsTrue(element1D == idx);
            }

            var element2D = strg2D.GetData <Int64>(0, 0);

            Assert.IsTrue(element2D == 0);
            element2D = strg2D.GetData <Int64>(1, 0);
            Assert.IsTrue(element2D == 1);
            element2D = strg2D.GetData <Int64>(2, 0);
            Assert.IsTrue(element2D == 2);
            element2D = strg2D.GetData <Int64>(0, 1);
            Assert.IsTrue(element2D == 3);
            element2D = strg2D.GetData <Int64>(1, 1);
            Assert.IsTrue(element2D == 4);
            element2D = strg2D.GetData <Int64>(2, 1);
            Assert.IsTrue(element2D == 5);
            element2D = strg2D.GetData <Int64>(0, 2);
            Assert.IsTrue(element2D == 6);
            element2D = strg2D.GetData <Int64>(1, 2);
            Assert.IsTrue(element2D == 7);
            element2D = strg2D.GetData <Int64>(2, 2);
            Assert.IsTrue(element2D == 8);

            var element3d = strg3D.GetData <Complex>(0, 0, 0);

            element3d = strg3D.GetData <Complex>(1, 0, 0);
            element3d = strg3D.GetData <Complex>(0, 1, 0);
            element3d = strg3D.GetData <Complex>(1, 1, 0);

            element3d = strg3D.GetData <Complex>(0, 0, 1);
            element3d = strg3D.GetData <Complex>(1, 0, 1);
            element3d = strg3D.GetData <Complex>(0, 1, 1);
            element3d = strg3D.GetData <Complex>(1, 1, 1);
        }
Esempio n. 4
0
        public void CheckChangeTensorLayout3D()
        {
            var strg3DCpy = (NDStorage)strg3D.Clone();

            Assert.IsTrue(strg3DCpy.TensorLayout == 1);

            strg3DCpy.ChangeTensorLayout(2);

            Assert.IsTrue(strg3DCpy.TensorLayout == 2);
            Assert.IsTrue(strg3DCpy.Shape.TensorLayout == 2);

            Assert.IsTrue(Enumerable.SequenceEqual(strg3DCpy.Shape.Dimensions, new int[] { 2, 2, 2 }));
            Assert.IsTrue(Enumerable.SequenceEqual(strg3DCpy.GetData <Complex>(), new Complex[] { 1, 5, 3, 7, 2, 6, 4, 8 }));

            strg3DCpy.ChangeTensorLayout(1);

            Assert.IsTrue(strg3DCpy.TensorLayout == 1);
            Assert.IsTrue(strg3DCpy.Shape.TensorLayout == 1);

            Assert.IsTrue(Enumerable.SequenceEqual(strg3DCpy.Shape.Dimensions, new int[] { 2, 2, 2 }));
            Assert.IsTrue(Enumerable.SequenceEqual(strg3DCpy.GetData <Complex>(), strg3D.GetData <Complex>()));

            strg3DCpy = (NDStorage)strg3DNonFull.Clone();

            Assert.IsTrue(strg3DCpy.TensorLayout == 1);

            strg3DCpy.ChangeTensorLayout(2);

            Assert.IsTrue(strg3DCpy.TensorLayout == 2);
            Assert.IsTrue(strg3DCpy.Shape.TensorLayout == 2);

            var expectedValues = new Complex[] { 1, 7, 13, 19, 3, 9, 15, 21, 5, 11, 17, 23, 2, 8, 14, 20, 4, 10, 16, 22, 6, 12, 18, 24 };

            Assert.IsTrue(Enumerable.SequenceEqual(strg3DCpy.Shape.Dimensions, new int[] { 2, 3, 4 }));
            Assert.IsTrue(Enumerable.SequenceEqual(strg3DCpy.GetData <Complex>(), expectedValues));

            strg3DCpy.ChangeTensorLayout(1);

            Assert.IsTrue(strg3DCpy.TensorLayout == 1);
            Assert.IsTrue(strg3DCpy.Shape.TensorLayout == 1);

            Assert.IsTrue(Enumerable.SequenceEqual(strg3DCpy.Shape.Dimensions, new int[] { 2, 3, 4 }));
            Assert.IsTrue(Enumerable.SequenceEqual(strg3DCpy.GetData <Complex>(), strg3DNonFull.GetData <Complex>()));
        }
Esempio n. 5
0
 public void InternalArrayCheck()
 {
     Assert.IsTrue(strg1D.GetData().Length == 10);
     Assert.IsTrue(strg2D.GetData().Length == 9);
     Assert.IsTrue(strg2DNonFull.GetData().Length == 10);
 }