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)); } }
//[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 })); }
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); }
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>())); }
public void InternalArrayCheck() { Assert.IsTrue(strg1D.GetData().Length == 10); Assert.IsTrue(strg2D.GetData().Length == 9); Assert.IsTrue(strg2DNonFull.GetData().Length == 10); }