Exemplo n.º 1
0
        /// <summary>
        ///     Sets <see cref="values"/> as the internal data storage and changes the internal storage data type to <see cref="values"/> type.
        /// </summary>
        /// <param name="values"></param>
        /// <remarks>Does not copy values.</remarks>
        public void ReplaceData(NDArray values)
        {
            var sliceDims      = new int[_slices.Length];
            var sliceStartIdxs = new int[_slices.Length];
            var sliceStopIdxs  = new int[_slices.Length];
            var sliceSteps     = new int[_slices.Length];

            for (var dimIdx = 0; dimIdx < _slices.Length; dimIdx++)
            {
                sliceDims[dimIdx]      = Shape.Dimensions[dimIdx];
                sliceStartIdxs[dimIdx] = 0;
                sliceStopIdxs[dimIdx]  = sliceDims[dimIdx] - 1;
                sliceSteps[dimIdx]     = _slices[dimIdx].GetAbsStep();
            }

            var storageStartIdxs = TransformIndices(sliceStartIdxs, _slices);
            var storageStopIdxs  = TransformIndices(sliceStopIdxs, _slices);
            var storageSteps     = sliceSteps;
            var storageIndexes   = storageStartIdxs;
            var tLength          = values.len;

            for (var tIdx = 0; tIdx < tLength; tIdx++)
            {
                //todo! switch values type and do a fast replace.
                _data.SetData(values.GetValue(tIdx), storageIndexes);
                IncrementIndexes(storageIndexes, storageStartIdxs, storageStopIdxs, storageSteps);
            }
        }