#!/usr/bin/env python # -*- coding: utf-8 -*- # written by Christoph Federrath from cfpack.defaults import * import argparse import numpy as np import timeit # sum up numbers in list n using np.sum() def sum_np(n): sum = np.sum(n) return sum # sum up numbers in list n using a loop def sum_loop(n): sum = 0 for i in range(len(n)): sum += n[i] return sum # loop using Numba import numba @numba.jit(nopython=True) def sum_loop_jit(n): sum = 0 for i in range(len(n)): sum += n[i] return sum # ===== the following applies in case we are running this in script mode ===== if __name__ == "__main__": parser = argparse.ArgumentParser(description='Sum numbers from 1 to n.') parser.add_argument("-n", "--n", type=float, help="Number n", default=1e8) parser.add_argument("-m", "--method", choices=['numpy', 'loop', 'numba'], default='numpy', help="The summation method to be used") args = parser.parse_args() # cast float n to int int_n = int(args.n) # print print("Summing all integers from 1 to "+str(int_n)+"...") # define array with numbers (for np.sum() below) numbers = np.arange(int_n)+1 # start the timer start_time = timeit.default_timer() if args.method == 'numpy': print("...using numpy.sum()...") sum = sum_np(numbers) if args.method == 'loop': print("...using loop...") sum = sum_loop(numbers) if args.method == 'numba': print("...using loop with numba.jit...") sum = sum_loop_jit(numbers) # stop the timer end_time = timeit.default_timer() # print the sum to stdout print("Sum = "+str(sum)) # print the time it took print("Run time = "+str(end_time-start_time)+" s")