Esempio n. 1
0
        /// <summary>
        /// Applies the operation to the input array
        /// </summary>
        /// <typeparam name="Ta">The type of input data to operate on</typeparam>
        /// <typeparam name="Tb">The type of output data to generate</typeparam>
        /// <param name="op">The operation to perform</param>
        /// <param name="in1">The input argument</param>
        /// <param name="out">The output target</param>
        public static NdArray <Tb> Apply <Ta, Tb>(IUnaryConvOp <Ta, Tb> op, NdArray <Ta> in1, NdArray <Tb> @out = null)
        {
            var method = typeof(UFunc).GetMethod("Apply_Entry_UnaryConv", System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.NonPublic);
            var gm     = method.MakeGenericMethod(typeof(Ta), typeof(Tb), op.GetType());

            return((NdArray <Tb>)gm.Invoke(null, new object[] { op, in1, @out }));
        }
Esempio n. 2
0
            internal static void UnaryConvOp <Ta, Tb, C>(IUnaryConvOp <Ta, Tb> op, NdArray <Ta> in1, NdArray <Tb> @out)
                where C : struct, IUnaryConvOp <Ta, Tb>
            {
                if ((SINGLE_CORE_THREAD || _no_blocks > 1) && @out.Shape.Dimensions[0].Length >= _no_blocks)
                {
                    int totalblocks = _no_blocks;
                    in1.DataAccessor.Allocate();
                    @out.DataAccessor.Allocate();

                    _threads.RunParallel((block) =>
                                         UFunc.UFunc_Op_Inner_UnaryConv_Flush(
                                             op,
                                             Reshape(in1, block, totalblocks),
                                             Reshape(@out, block, totalblocks)
                                             )
                                         );
                }
                else
                {
                    UFunc.UFunc_Op_Inner_UnaryConv_Flush(op, in1, @out);
                }
            }
Esempio n. 3
0
 /// <summary>
 /// Register a pending conversion operation on the underlying array
 /// </summary>
 /// <param name="operation">The operation performed</param>
 /// <param name="output">The output operand</param>
 /// <param name="input">The input operand</param>
 public virtual void AddConversionOperation <Ta>(IUnaryConvOp <Ta, T> operation, NdArray <T> output, NdArray <Ta> input)
 {
     m_clock = LazyAccessorCollector.AddOperation(new PendingUnaryConversionOperation <T, Ta>(operation, output, input));
 }