<SYSTEM_TASK:>
Given the following text description, write Python code to implement the functionality described below step by step
<END_TASK>
<USER_TASK:>
Description:
 Random Numbers in NumPy
Step1:  The numpy.random module adds to the standard built-in Python random functions for generating efficiently whole arrays of sample values with many kinds of probability distributions.
Example
Step2:  Advantages? Built-in Random Python only samples one value at a time and it is significantly less efficient.
The following block builds an array with 10$^7$ normally distributed values
Step3:  Write the equivalent code using the np.random.normal() function and time it! Keep in mind that the NumPy function is vectorized!
See the Numpy documentation site for detailed info on the numpy.random module
Random Walks
Using standard Python builtin functions, try to write a piece of code corresponding to a 1D Random walker initially located at 0 and taking steps of 1 or -1 with equal probability. 
Hint
Step4:  Now think of a possible alternative code using NumPy. Keep in mind that
<ASSISTANT_TASK:>
Python Code:
import numpy as np
Explanation: Random Numbers in NumPy
End of explanation
samples = np.random.normal(size=(4,4))
samples
Explanation: The numpy.random module adds to the standard built-in Python random functions for generating efficiently whole arrays of sample values with many kinds of probability distributions.
Example: build a 4x4 array of samples from the standard normal distribution,
End of explanation
import random
N = 10000000
%timeit samples = [random.normalvariate(0,1) for i in range(N)]
Explanation: Advantages? Built-in Random Python only samples one value at a time and it is significantly less efficient.
The following block builds an array with 10$^7$ normally distributed values:
End of explanation
import matplotlib.pyplot as plt
%matplotlib inline
#plt.plot(INSERT THE NAME OF THE VARIABLE CONTAINING THE PATH)
Explanation: Write the equivalent code using the np.random.normal() function and time it! Keep in mind that the NumPy function is vectorized!
See the Numpy documentation site for detailed info on the numpy.random module
Random Walks
Using standard Python builtin functions, try to write a piece of code corresponding to a 1D Random walker initially located at 0 and taking steps of 1 or -1 with equal probability. 
Hint: use a list to keep track of the path of your random walker and have a look at the random.randint() function to generate the steps. 
If it's too hard to start from scratch, you may want to peek at my solution.
Use matplotlib to plot the path of your random walker
End of explanation
#plt.plot(INSERT THE NAME OF THE VARIABLE CONTAINING THE PATH)
Explanation: Now think of a possible alternative code using NumPy. Keep in mind that:
NumPy offers arrays to store the path
numpy.random offers a vectorized version of random generating functions
Again, here is my solution.
Let's have a look at it:
End of explanation
<END_TASK>