示例#1
0
        private IEnumerable <double> IntegrateBatch2D(string variable, Array prefetchedData, int[] prefetchedDataOrigin, IEnumerable <IPs[]> ipsArrays)
        {
            Type dataType = prefetchedData.GetType().GetElementType();

            bool effectiveMvCheck = checkForMissingValues;

            object missingValue = dataSetInfo.GetMissingValue(variable);

            if (missingValue == null)
            {
                if (dataType == typeof(double))
                {
                    missingValue = double.NaN;
                }
                else if (dataType == typeof(float))
                {
                    missingValue = float.NaN;
                }
                else
                {
                    effectiveMvCheck = false; //switching off MV check if no MV information is available
                }
            }

            //invoking method from library
            if (effectiveMvCheck)
            {
                foreach (var pointResult in Utils.ArrayMean.IntegrateSequenceWithMVs2D(variable, prefetchedData, missingValue, prefetchedDataOrigin, ipsArrays))
                {
                    yield return(pointResult.Integral / pointResult.SumOfWeights);
                }
            }
            else
            {
                foreach (var pointResult in Utils.ArrayMean.IntegrateSequence2D(variable, prefetchedData, prefetchedDataOrigin, ipsArrays))
                {
                    yield return(pointResult.Integral / pointResult.SumOfWeights);
                }
            }
        }
示例#2
0
        public IEnumerable <double> CalculateMode(string variable, Array prefetchedData, int[] prefetchedDataOrigin, IEnumerable <int[][]> idxArrays)
        {
            Type dataType = prefetchedData.GetType().GetElementType();

            bool effectiveMvCheck = checkForMissingValues;

            object missingValue = dataSetInfo.GetMissingValue(variable);

            if (missingValue == null)
            {
                if (dataType == typeof(double))
                {
                    missingValue = double.NaN;
                }
                else if (dataType == typeof(float))
                {
                    missingValue = float.NaN;
                }
                else
                {
                    effectiveMvCheck = false; //switching off MV check if no MV information is available
                }
            }

            switch (prefetchedData.Rank)
            {
            //case 2:
            //    if (effectiveMvCheck)
            //        return Utils.ArrayMode.FindModeSequenceWithMVs2D(variable, prefetchedData, missingValue, prefetchedDataOrigin, idxArrays);
            //    else
            //        return Utils.ArrayMode.FindModeSequence2D(variable, prefetchedData, prefetchedDataOrigin, idxArrays);
            case 3:
                if (effectiveMvCheck)
                {
                    return(Utils.ArrayMode.FindModeSequence3D(variable, prefetchedData, prefetchedDataOrigin, idxArrays, missingValue));
                }
                else
                {
                    return(Utils.ArrayMode.FindModeSequence3D(variable, prefetchedData, prefetchedDataOrigin, idxArrays));
                }

            default:
                throw new InvalidOperationException("Unexpected prefetched array rank. Now only 3D varaibles are supported");
            }
        }