<SYSTEM_TASK:>
Given the following text description, write Python code to implement the functionality described below step by step
<END_TASK>
<USER_TASK:>
Description:
 Numpy Exercise 2
Imports
Step2:  Factorial
Write a function that computes the factorial of small numbers using np.arange and np.cumprod.
Step4:  Write a function that computes the factorial of small numbers using a Python loop.
Step5:  Use the %timeit magic to time both versions of this function for an argument of 50. The syntax for %timeit is
<ASSISTANT_TASK:>
Python Code:
import numpy as np
%matplotlib inline
import matplotlib.pyplot as plt
import seaborn as sns
Explanation: Numpy Exercise 2
Imports
End of explanation
def np_fact(n):
    Compute n! = n*(n-1)*...*1 using Numpy.
    LOL = np.arange(1, n+1, 1)
    Factorial = np.cumprod(LOL)
    
    if n == 0:
        return 1
    
    return Factorial[-1]
assert np_fact(0)==1
assert np_fact(1)==1
assert np_fact(10)==3628800
assert [np_fact(i) for i in range(0,11)]==[1,1,2,6,24,120,720,5040,40320,362880,3628800]
Explanation: Factorial
Write a function that computes the factorial of small numbers using np.arange and np.cumprod.
End of explanation
def loop_fact(n):
    Compute n! using a Python for loop.
    if n == 0:
        return 1
    else:
        Fact = 1
        for x in range(1,n+1,1):
            Fact = Fact*x
        return Fact
        
    
assert loop_fact(0)==1
assert loop_fact(1)==1
assert loop_fact(10)==3628800
assert [loop_fact(i) for i in range(0,11)]==[1,1,2,6,24,120,720,5040,40320,362880,3628800]
Explanation: Write a function that computes the factorial of small numbers using a Python loop.
End of explanation
%timeit -n1 -r1 loop_fact(100000)
%timeit -n1 -r1 np_fact(100000)
Explanation: Use the %timeit magic to time both versions of this function for an argument of 50. The syntax for %timeit is:
python
%timeit -n1 -r1 function_to_time()
End of explanation
<END_TASK>