public override void Assign <T>(NArray <T> a, NArrayBool condition, NArray <T> result)
        {
            T[]    aArray, resultArray;
            bool[] cArray;
            int    aStart, cStart, resultStart;

            GetArray(a, out aArray, out aStart);
            GetArray(condition, out cArray, out cStart);
            GetArray(result, out resultArray, out resultStart);
            if (a.IsScalar)
            {
                for (int i = 0; i < result.Length; ++i)
                {
                    if (cArray[cStart + i])
                    {
                        resultArray[resultStart + i] = aArray[aStart];
                    }
                }
            }
            else
            {
                for (int i = 0; i < result.Length; ++i)
                {
                    if (cArray[cStart + i])
                    {
                        resultArray[resultStart + i] = aArray[aStart + i];
                    }
                }
            }
        }
        public override void RelativeOperation(NArray <int> a, NArray <int> b, NArrayBool result, RelativeOperator op)
        {
            int[]  aArray, bArray;
            bool[] resultArray;
            int    aStart, bStart, resultStart;

            GetArray(a, out aArray, out aStart);
            GetArray(b, out bArray, out bStart);
            GetArray(result, out resultArray, out resultStart);

            switch (op)
            {
            case RelativeOperator.LessThan:
                for (int i = 0; i < resultArray.Length; ++i)
                {
                    resultArray[resultStart + i] = aArray[aStart + i] < bArray[bStart + i];
                }
                break;

            case RelativeOperator.LessThanEquals:
                for (int i = 0; i < resultArray.Length; ++i)
                {
                    resultArray[resultStart + i] = aArray[aStart + i] <= bArray[bStart + i];
                }
                break;

            case RelativeOperator.Equals:
                for (int i = 0; i < resultArray.Length; ++i)
                {
                    resultArray[resultStart + i] = aArray[aStart + i] == bArray[bStart + i];
                }
                break;

            case RelativeOperator.NotEquals:
                for (int i = 0; i < resultArray.Length; ++i)
                {
                    resultArray[resultStart + i] = aArray[aStart + i] != bArray[bStart + i];
                }
                break;

            case RelativeOperator.GreaterThanEquals:
                for (int i = 0; i < resultArray.Length; ++i)
                {
                    resultArray[resultStart + i] = aArray[aStart + i] >= bArray[bStart + i];
                }
                break;

            case RelativeOperator.GreaterThan:
                for (int i = 0; i < resultArray.Length; ++i)
                {
                    resultArray[resultStart + i] = aArray[aStart + i] > bArray[bStart + i];
                }
                break;
            }
        }
        public override void LogicalOperation(NArrayBool a, NArrayBool b, NArrayBool result, LogicalBinaryElementWiseOperation operation)
        {
            bool[] aArray, bArray, resultArray;
            int    aStart, bStart, resultStart;

            GetArray(a, out aArray, out aStart);
            GetArray(b, out bArray, out bStart);
            GetArray(result, out resultArray, out resultStart);
            if (operation == LogicalBinaryElementWiseOperation.And)
            {
                for (int i = 0; i < result.Length; ++i)
                {
                    resultArray[resultStart + i] = aArray[aStart + i] && bArray[bStart + i];
                }
            }
            else if (operation == LogicalBinaryElementWiseOperation.Or)
            {
                for (int i = 0; i < result.Length; ++i)
                {
                    resultArray[resultStart + i] = aArray[aStart + i] || bArray[bStart + i];
                }
            }
        }
예제 #4
0
 public abstract void Assign <T>(NArray <T> a, NArrayBool condition, NArray <T> result);
예제 #5
0
 public abstract void LogicalOperation(NArrayBool a, NArrayBool b, NArrayBool result, LogicalBinaryElementWiseOperation operation);
예제 #6
0
 public abstract void RelativeOperation(NArray <int> a, int b, NArrayBool result, RelativeOperator op);
예제 #7
0
 public abstract void RelativeOperation(NArray <double> a, double b, NArrayBool result, RelativeOperator op);