<SYSTEM_TASK:>
Given the following text description, write Python code to implement the functionality described below step by step
<END_TASK>
<USER_TASK:>
Description:
 Some Basic NumPy functionality (attributes, array creation, basic operations between arrays, and basic operations on one array). Adapted from https
Step1:  Basic Attributes
Step2:  Array Creation
Step3:  Operations between two arrays
Step4:  Operations on one array
<ASSISTANT_TASK:>
Python Code:
#"NumPy's main object is the homogeneous multidimensional array"
import numpy as np
arr = np.array([[0,1,2],[3,4,5]])
arr
Explanation: Some Basic NumPy functionality (attributes, array creation, basic operations between arrays, and basic operations on one array). Adapted from https://docs.scipy.org/doc/numpy-dev/user/quickstart.html
End of explanation
#Array class (also known as array but np.array is not the same as standard python's array.array)
type(arr)
#Number of axes (also known as rank)
arr.ndim 
#Dimensions of the array (n rows by m columns)
arr.shape
#Total number of elements (product of shape)
arr.size
#Type of elements in the array (inferred if not specified)
arr.dtype
Explanation: Basic Attributes
End of explanation
#Array from nested lists
arr = np.array([[1,2,3],[4,5,6]]) 
arr
#Array of zeros
np.zeros((2,3))
#Array of ones
np.ones((2,3))
#"Empty" array
np.empty((2,3))
#Sequence of numbers - similar to range
np.arange(0,50,10) #Start, stop, step
#Sequence of numbers - specific number of elements specified
np.linspace(0,50,5) #Start, stop, number of elements
#Sequence of numbers - with specific shape
np.arange(6).reshape(2,3)
Explanation: Array Creation
End of explanation
a = np.arange(0,100,10)
b = np.arange(10)
a
b
#Element-wise subtraction
a-b
#Element-wise addition
a+b
#Matrix multiplication
np.dot(a,b)
#Matrix multiplication (option 2)
a.dot(b)
Explanation: Operations between two arrays
End of explanation
arr = np.arange(12).reshape(3,4)
arr
#Sum of all elements (as if a flat list)
arr.sum()
#Min of all elements (as if a flat list)
a.min()
#Max of all ements (as if a flat list)
a.max()
#Column sum (axis=1 for row sum)
arr.sum(axis=0)
#Column min (axis=1 for row min)
arr.sum(axis=0)
#Culumulative sum along column (axis=1 for row)
arr.cumsum(axis=0)
#Exponentiation
arr = np.arange(3)
np.exp(arr)
#Square roote
np.sqrt(arr)
Explanation: Operations on one array
End of explanation
<END_TASK>