您現在的位置是:首頁 > 武術
numpy入門 day05
- 由 小悅 發表于 武術
- 2022-03-10
互逆矩陣等價嗎
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