240 likes | 377 Views
Computation for Physics 計算物理概論. Introduction to NumPy and SciPy. List v.s . Array ( numpy package). List Variable length, you can add or remove elements. Elements can be of different types. Flexible. Array The number of elements is fixed. The elements must be of the same type.
E N D
Computation for Physics計算物理概論 Introduction to NumPy and SciPy
List v.s. Array (numpy package) • List • Variable length, you can add or remove elements. • Elements can be of different types. • Flexible. • Array • The number of elements is fixed. • The elements must be of the same type. • Behave roughly like vectors and matrices. • Faster.
1D Array >>>from numpy import zeros >>>a = zeros(4, float) >>>print(a) [0. 0. 0. 0.] >>>a = zeros(5, float) >>>print(a) [0 0 0 0 0] >>>a = zeros(3,complex) >>>print(a)
2D Array >>>a = zeros([3,4],float) >>>print(a) [[ 0. 0. 0. 0.] [ 0. 0. 0. 0.] [ 0. 0. 0. 0.]]
Array Initialization in NumPy • zeros • Create an array with all elements equal to zero. • ones • Create an array with all elements equal to one. • empty • Create an empty array. (Faster.) • In practice the aren't empty. (Random stuff in the memory).
List Array List >>>r = [1.0, 1.5, -2.2] >>>a = array(r,float) >>>a = array([1.0, 1.5, -2.2], float) >>>print(a[0]) 1.0 >>>a = array([[1,2,3],[4,5,6]], int) >>>print(a) [[ 1 2 3] [ 4 5 6]] >>>print(a) >>>r = list(a)
Accessing and Modifying Elements >>>a = array([1.0, 1.5, -2.2], float) >>>a[0] 1.0 >>>a[2]=4 (4 will be converted into float) >>>a = array([[1,2,3],[4,5,6]], int) >>>a[0][1] 2 >>>a[0][1]=0 >>>print(a) [[ 1 0 3] [ 4 5 6]]
Reading a 1D Array from a File values.txt 1.0 1.5 -2.2 2.6 >>>from numpy import loadtxt >>>a = loadtxt("values.txt", float) >>>print(a) [ 1. 1.5 -2.2 2.6]
Reading a 2D Array from a File values.txt 1 2 3 4 3 4 5 6 5 6 7 8 >>>from numpy import loadtxt >>>a = loadtxt("values.txt", float) >>>print(a) [[ 1. 2. 3. 4.] [ 3. 4. 5. 6.] [ 5. 6. 7. 8.]]
Arithmetic with Arrays >>>a[0] = a[1] + 1 >>>x = a[2]**2 -2*a[3]/y >>>r = [1,2,3,4] >>>a = array(r, int) >>>s = 2*r >>>b = 2*a >>>print(s) [1,2,3,4,1,2,3,4] >>>print(b) [2 4 6 8]
Add or Subtract Two Arrays >>>a = array([1,2,3,4],int) >>>b = array([2,4,6,8],int) >>>print(a+b) [3 6 9 12] >>>print(b-a) [1 2 3 4] (Two arrays must have the same size) >>>>print(a+1)
Multiply Two Arrays ≠ Dot Product >>>a = array([1,2,3,4],int) >>>b = array([2,4,6,8],int) >>>print(a*b) [2 8 18 32] >>>print(b/a) [2.0 2.0 2.0 2.0]
"Dot Product" of Two 1D Arrays="Inner Product" >>>from numpy import array, dot >>>a = array([1,2,3,4],int) >>>b = array([2,4,5,8],int) >>>print(dot(a,b)) 60
"Dot Product" of Two 2D Arrays = "Matrix Product" >>>a = array([[1,3],[2,4]],int) >>>b = array([[4,-2],[-3,1]],int) >>>c = array([[1,2],[2,1]],int) >>>print(dot(a,b)+2*c) [[-3 5] [ 0 2]]
Array Functions • Most list functions can be applied to 1D array • sum • max • min • len • You can also apply math functions >>>a = array([1,2,3,4],float) >>>print(sin(a)) [0.84147098 0.90929743 0.14112001 -0.7568025]
Array Methods >>>a = array([1,2,3,4],float) >>>a.size 4 >>>a.shape (4,) >>>a = array([[1,2,3],[4,5,6],int) >>>a.size 6 >>>a.shape (2,3)
Try: Average of a Set of Values in a File • A set of numbers stored in a file values.txt. • We don't know how many numbers there are. • Want to calculate their mean.
Mean and Mean-Square from numpy import loadtxt values = loadtxt("values.txt",float) mean = sum(values)/len(values) mean_sqr = sum(values*values)/len(values) print(mean) print(mean_sqr)
Geometric Mean from numpy import loadtxt,log,exp from math import log,exp values = loadtxt("values.txt",float) geometric=exp(sum(log(values))/len(values)) print(geometric)
numpy.arange • arange([start],stop[,step],dtype=None) • Return evenly spaced values within a given interval. • Values are generated within the half-open interval [start, stop) (in other words, the interval including start but excluding stop). For integer arguments the function is equivalent to the Python built-in range function, but returns an ndarray rather than a list. • When using a non-integer step, such as 0.1, the results will often not be consistent. It is better to use linspace for these cases. >>> np.arange(3) array([0, 1, 2]) >>> np.arange(3.0) array([ 0., 1., 2.]) >>> np.arange(3,7) array([3, 4, 5, 6]) >>> np.arange(3,7,2) array([3, 5])
numpy.linspace • Return evenly spaced numbers over a specified interval. • Return evenly spaced numbers over a specified interval. • Returns num evenly spaced samples, calculated over the interval [start, stop ]. • The endpoint of the interval can optionally be excluded. >>>linspace(2.0, 3.0, num=5) array([ 2., 2.25, 2.5, 2.75, 3. ]) >>>linspace(2.0, 3.0, num=5, endpoint=False) array([ 2. , 2.2, 2.4, 2.6, 2.8]) >>>linspace(2.0, 3.0, num=5, retstep=True) (array([ 2. , 2.25, 2.5 , 2.75, 3. ]), 0.25)
numpy.random • import numpy.random • numpy.random.random() • from numpy.random import random • random() • from numpy.random import * • random()
numpy.random • seed([seed]) • get_state() • set_state(state) • random(size)=random_sample(size)=ranf([size])=sample([size]) • Return random floats in the half-open interval [0.0, 1.0). • randint(low,high=None,size=None) • Return random integers from low (inclusive) to high (exclusive). • choice(a[,size,replace,p]) • shuffle(X) • permutation(X)
Try: Random Number • Input N. • Generate N random numbers. • Output the mean and the standard deviation.