sympy庫對於需要進行數**算的python開發者非常友好,它不僅擁有比math、numpy等庫更高的運算精度,還具有更強大的符號運算能力,能夠輕鬆對表示式進行簡化、積分、求導等操作,堪稱居家旅行,養家餬口之利器。下面直接用**進行說明。
直接在anaconda prompt中用pip install sympy進行安裝即可,網路條件不好時可能報錯,多試幾次就能成功。
print
(math.sqrt(2)
**2)print
(np.sqrt(2)
**2)print
(sympy.sqrt(2)
**2)
執行結果為:
# 2.0000000000000004
# 2.0000000000000004
# 2
2
\sqrt
2作為乙個無理數,如若計算精度不高(即保留的精度不夠多),計算結果就會有所失真,對於實數運算來說,這點誤差可能不足掛齒,但若是針對整數運算,則可能得出完全不同的結果。
從運算結果可以看出,math和numpy的運算結果帶有乙個很小的誤差,而sympy的計算結果在當前的精度下是準確的,具有較高的計算精度。
sympy可以對各種表示式進行簡化,且使用簡便,如下:
from sympy import
*x,y,z,a,b,c = symbols(
'x,y,z,a,b,c'
)f =(2
/3)*x**2+
(1/3
)*x**
2+ x + x +
1print
(simplify(f)
)print
(f.simplify(
))
執行結果:
# 1.0*x**2 + 2*x + 1
# 1.0*x**2 + 2*x + 1
兩種方法等價,結果相同。其中symbols方法用以將字串轉換為代表變數的物件。
f=
(x+1)**
2print
(expand(f)
)print
(f.expand(
))
結果為:
# x**2 + 2*x + 1
f1 =
2*x - y + z -
10f2 =
3*x +
2*y - z -
16f3 = x +
6*y -z -
28print
(solve(
[f1,f2,f3]
))
sympy可以自動求解由f1、f2和f3三個表示式構成的齊次方程組的解。計算結果為:
#
print
(diff(sin(
2*x)
), x,1)
print
(sin(
2*x)
.diff(x)
)
diff方法用於對表示式進行求導操作,其中第乙個引數為需要求導的表示式,第二個引數為自變數,第三個引數為求導的次數。執行結果為:
#2*cos(2*x) x 1
不定積分與求導互為反操作。
f =
3*x**2+
1print
(integrate(f,x)
)
結果為:
#x**3 + x
from scipy.stats import bernoulli
p_i =
1.0/
2fp = bernoulli(p_i)
#產生伯努利分布的隨機變數
xs = fp.rvs(
200)
#產生200個樣本
print
(xs[:30
])
呼叫scipy庫中的bernoulli方法獲得隨機變數,並顯示前30個樣本值。
[10
0011
1011
0011
0100
0110
0110
1110
]
import sympy
import numpy as np
x,p,z = sympy.symbols(
'x p z'
,positive=
true
)#positive=true表示xpz中的引數都是正數
phi = p**x*(1
-p)**(1
-x)#分布函式
l = np.prod(
[phi.subs(x,i)
for i in xs]
)print
(l)
其中subs方法用於置換操作,即將表示式phi中的x用i代替,而i則是存放隨機變數值得列表xs中的值。結果為:
#p**262*(1 - p)**238
#對表示式取對數
logl = sympy.expand_log(sympy.log(l)
)#對表示式求一階導,並使之為0,此時x即為使似然函式最大的值
sol = sympy.solve(sympy.diff(logl,p)
)print
(sol)
如果樣本數量足夠多,試驗結果將於真實值無限接近。極大似然估計多用於對類條件概率的估計。執行結果為:
#[12/25]
安裝和使用sympy
3 解開壓縮包,找到sympy包所在的資料夾,如圖。4 在上面所示的資料夾內,開啟命令列視窗,執行 pip install sympy 出現下圖,匯入包結束。5 示例 import sympy a,b 500,600 print a,b numbers range a,b prime numbers...
索引的特點及使用
1.1 索引特點 第一,通過建立唯一性索引,可以保證資料庫表中每一行資料的唯一性。第二,可以大大加快資料的檢索速度,這也是建立索引的最主要的原因。第三,可以加速表和表之間的連線,特別是在實現資料的參考完整性方面特別有意義。第四,在使用分組和排序子句進行資料檢索時,同樣可以顯著減少查詢中分組和排序的時...
MylSAM引擎的特點及場景使用
1.什麼是mylsam引擎 myisam引擎是mysql關聯式資料庫管理系統的預設儲存引擎 mysql5.5版本以前 這種mysql 表儲存結構從舊的isam 擴充套件出許多有用的功能。在新版本的mysql中,innodb引擎由於其對事物參照完整性,以及更高的併發性等優點開始逐步的取代myisam引...