您現在的位置是:首頁 > 武術

numpy入門 day05

  • 由 小悅 發表于 武術
  • 2022-03-10
簡介pi]b = numpy

互逆矩陣等價嗎

7。numpy中的三角函式都是通用函式

a = [-np。pi, -np。pi/2, 0, np。pi/2, np。pi]

b = numpy。sin(a)

b: [0, -1, 0, 1, 0]

x = Asin(at+pi/2)

y = Bsin(bt)

程式碼:lissa。py

合成方波波形

N->oo

f(x) = 4/pi * sigma(sin((2k-1)x)/(2k-1))

k=1,2,。。。,N

= 4/pi * (sin(x) + sin(3x)/3 + sin(5x)/5 + 。。。)

程式碼:squr。py

8。numpy中將python語言的位運算也實現為通用函式

1)異或:^/ndarray。__xor__/numpy。bitwise_xor

1^0=1

1^1=0

0^0=0

0^1=1

判斷兩個整數同號還是異號?

if (a > 0 and b < 0) or (a < 0 and b > 0): 。。。

else: 。。。

if a * b < 0: 。。。

else: 。。。

if a ^ b < 0: 異號

2)位與:&/ndarray。__and__/numpy。bitwise_and

1 & 0 = 0

1 & 1 = 1

0 & 0 = 0

0 & 1 = 0

如何判斷一個整數是否是2的整數冪?

2 = 2^1 10 01

4 = 2^2 100 011

8 = 2^3 1000 0111

。。。

if a & (a-1) == 0: a是2的整數冪

3)移位:numpy。left_shift/numpy。right_shift

左移一位相當於乘2,由移一位相當於除2。

程式碼:bit。py

六、numpy中子模組

1。線性代數子模組(linalg)

1)矩陣求逆:inv

AxA^-1=I

B = numpy。linalg。inv(A)

AB -> I

程式碼:inv。py

2)解線性方程組:solve

x-2y+z=0

2y-8z-8=0

-4x+5y+9z+9=0

-116+80+27+9=0

————————

1x + -2y + 1z = 0

0x + 2y + -8z = 8

-4x + 5y + 9z = -9

————————

/ 1 -2 1 \ / x \ / 0 \

| 0 2 -8 | x | y | =| 8 |

\ -4 5 9 / \ z / \ -9 /

A x b

x = numpy。linalg。solve(A, b)

程式碼:solve。py

3)特徵值和特徵向量:eigvals/eig

對於n階方陣A,如果存在數a和非零n維列向量x,使得

Ax=ax成立,則稱a是矩陣A的一個特徵值,x是矩陣A屬於

特徵值a的特徵向量。

程式碼:eig。py

4)廣義逆矩陣:pinv

如果矩陣為方陣則廣義逆矩陣就是常規逆矩陣,等價於inv,如果矩陣非方陣,inv函式會丟擲異常,但pinv函式會返回其廣義逆矩陣。

程式碼:pinv。py

5)行列式值:det

| a b |

| c d |

ad-bc

| a b c |

| d e f |

| g h i |

a | e f | - b | d f | + c | d e |

| h i | | g i | | g h |

a(ei-fh)-b(di-fg)+c(dh-eg)

程式碼:det。py

2。傅立葉變換子模組(fft)

numpy。fft。fftfreq(頻率數(取樣數), 取樣週期)->頻率陣列

numpy。fft。fft(取樣)->複數陣列,每一個元素表示一個sin函式,該複數的模表示sin函式振幅(分貝),該複數的幅角即為初相位角。

s=f(t) =FFT=> (A,fai)=F(w)

(A,fai)用一個複數(a+bj)表示,對應一個正弦分量:

s=Asin(wt+fai) =IFFT=> s=f(t)

numpy。fft。ifft(複數陣列)->取樣

程式碼:fft。py、filter。py

3。隨機數模組(random)

1)二項分佈

numpy。random。binomial(n, p, size)

產生size個隨機數,每個隨機數來自n次嘗試中成功的次數,其中每次嘗試成功的機率為p。

猜硬幣,初始籌碼1000,每輪猜9次(每次猜對的機率0。5),猜對5次及5次以上為贏,籌碼加1,否則為輸,籌碼減1,問10000輪,手中還剩多少?

numpy。random。binomial(9, 0。5, 10000)

程式碼:bi。py

2)超幾何分佈

numpy。hypergeometric(ngood, nbad, nsample, size)

產生size個隨機數,每個隨機數來自隨機抽取nsample個樣本中好樣本數,總樣本由ngood個好樣本,和nbad個壞樣本組成。

將25個紅球和1個綠球放在一起,每次拿3個球,全為紅加1分,只要有綠球減1分,問100輪以後多少分?

numpy。hypergeometric(25, 1, 3, 100)

程式碼:hyper。py

3)標準正態分佈

numpy。random。normal(size)

產生size個服從標準正態分佈的隨機數。

程式碼:norm。py

七、numpy的專用函式

1。排序

numpy。lexsort((b, a))

對陣列a做升序排列,對值相同的元素參考陣列b升序,不會改變a,也不會返回排序好陣列,而是返回有序的下標。

0 1 2 3 4

a: 50 40 40 20 30

numpy。lexsort(a) -> 3 4 1 2 0

b: 100 300 200 500 600

numpy。lexsort((b, a))-> 3 4 2 1 0

numpy入門 day05

Top