public static NDArray array(Array array, Type dtype = null, int ndmin = 1, bool copy = true, char order = 'C') { var arrType = array.ResolveElementType(); //handle dim expansion and extract shape Shape shape; var dims = array.ResolveRank(); var missing = dims - ndmin; if (missing < 0) { shape = Arrays.Concat(Enumerable.Repeat(1, Math.Abs(missing)).ToArray(), Shape.ExtractShape(array)); } else { shape = Shape.ExtractShape(array); } //flatten if (shape.NDim > 1) { array = Arrays.Flatten(array); copy = false; } if (dtype != null && dtype != arrType) { array = ArrayConvert.To(array, dtype); copy = false; } return(new NDArray(copy ? (Array)array.Clone() : array, shape, order)); }
/// <summary> /// Constructor which takes .NET array /// dtype and shape is determined from array /// </summary> /// <param name="values"></param> /// <param name="shape"></param> /// <param name="order"></param> /// <returns>Array with values</returns> /// <remarks>This constructor calls <see cref="IStorage.Allocate(NumSharp.Shape,System.Type)"/></remarks> public NDArray(Array values, Shape shape = default, char order = 'C') : this(values.GetType().GetElementType()) { if (order != 'C') shape.ChangeTensorLayout(order); if (shape.IsEmpty) shape = Shape.ExtractShape(values); Storage.Allocate(values.ResolveRank() != 1 ? ArraySlice.FromArray(Arrays.Flatten(values), false) : ArraySlice.FromArray(values, false), shape); }