Computation for Physics 計算物理概論

24
Computation for Physics 計計計計計計 Introduction to NumPy and SciPy

description

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. - PowerPoint PPT Presentation

Transcript of Computation for Physics 計算物理概論

Page 1: Computation for Physics 計算物理概論

Computation for Physics計算物理概論

Introduction to NumPy and SciPy

Page 2: Computation for Physics 計算物理概論

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.

Page 3: Computation for Physics 計算物理概論

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)

Page 4: Computation for Physics 計算物理概論

2D Array

>>>a = zeros([3,4],float)>>>print(a)[[ 0. 0. 0. 0.] [ 0. 0. 0. 0.] [ 0. 0. 0. 0.]]

Page 5: Computation for Physics 計算物理概論

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).

Page 6: Computation for Physics 計算物理概論

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)

Page 7: Computation for Physics 計算物理概論

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]]

Page 8: Computation for Physics 計算物理概論

Reading a 1D Array from a File

values.txt1.01.5-2.22.6

>>>from numpy import loadtxt>>>a = loadtxt("values.txt", float)>>>print(a)[ 1. 1.5 -2.2 2.6]

Page 9: Computation for Physics 計算物理概論

Reading a 2D Array from a File

values.txt1 2 3 43 4 5 65 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.]]

Page 10: Computation for Physics 計算物理概論

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]

Page 11: Computation for Physics 計算物理概論

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)

Page 12: Computation for Physics 計算物理概論

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]

Page 13: Computation for Physics 計算物理概論

"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

Page 14: Computation for Physics 計算物理概論

"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]]

(1 32 4)( 4 −2

−3 1 )+2(1 22 1)=(−3 5

0 2)

Page 15: Computation for Physics 計算物理概論

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]

Page 16: Computation for Physics 計算物理概論

Array Methods

>>>a = array([1,2,3,4],float)>>>a.size4>>>a.shape(4,)>>>a = array([[1,2,3],[4,5,6],int)>>>a.size6>>>a.shape(2,3)

Page 17: Computation for Physics 計算物理概論

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.

Page 18: Computation for Physics 計算物理概論

Mean and Mean-Square

from numpy import loadtxtvalues = loadtxt("values.txt",float)mean = sum(values)/len(values)mean_sqr = sum(values*values)/len(values)print(mean)print(mean_sqr)

Page 19: Computation for Physics 計算物理概論

Geometric Mean

from numpy import loadtxt,log,expfrom math import log,expvalues = loadtxt("values.txt",float)geometric=exp(sum(log(values))/len(values))print(geometric)

𝑥=[∏𝑖=1

𝑛

𝑥 𝑖]1 /𝑛

→𝑥=𝑒𝑥𝑝( 1𝑛∑𝑖=1𝑛

𝑙𝑛 (𝑥 𝑖 ))

Page 20: Computation for Physics 計算物理概論

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])

Page 21: Computation for Physics 計算物理概論

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)

Page 22: Computation for Physics 計算物理概論

numpy.random

• import numpy.random– numpy.random.random()

• from numpy.random import random– random()

• from numpy.random import *– random()

Page 23: Computation for Physics 計算物理概論

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)

Page 24: Computation for Physics 計算物理概論

Try: Random Number

• Input N.• Generate N random numbers.• Output the mean and the standard deviation.