日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

scipy安装_4. Python--Scipy库(下/13-17)

發布時間:2024/8/1 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 scipy安装_4. Python--Scipy库(下/13-17) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文非常全面的介紹了Scipy庫,希望大家有耐心的看下去。參考鏈接在最后。

目錄:

1. Scipy簡介

1.1 子包

1.2 數據結構

2. Scipy開發環境安裝

2.1 Windows

2.2 Linux

3. Scipy基本功能

3.1 內在Numpy數組創建

3.2 矩陣

4. Scipy簇聚

4.1 Scipy中實現K-Means

4.2 三個集群計算K均值

5. Scipy常量

5.1 Scipy常量包

5.2 可用常量列表

6. FFTpack

6.1 快速傅立葉變換

6.2 離散余弦變換

7. 積分

7.1 單積分

7.2 多重積分

7.3 雙重積分

8. 插值

8.1 插值是什么

8.2 一線插值

8.3 樣條曲線

9. 輸入/輸出

10. Linalg

10.1 線性方程組

10.2 查找行列式

10.3 特征向量與特征值

11. Ndimage

11.1 打開與寫入圖像文件

11.2 濾鏡

11.3 邊緣檢測

12. 優化算法

12.1 Nelder-Mead單純形算法

12.2 最小二乘

13. 統計函數

13.1 正太連續隨機變量

13.2 均勻分布

14. CSGraph

14.1 圖表示

14.2 獲取單詞列表

15. Scipy空間

15.1 Delaunay三角

15.2 共面點

15.3 凸殼

16. Scipy ODR

17. Scipy特殊包

----------------------------------------------------------------------------------

13. 統計函數

所有的統計函數都位于子包scipy.stats中,并且可以使用info(stats)函數獲得這些函數的完整列表。隨機變量列表也可以從stats子包的docstring中獲得。 該模塊包含大量的概率分布以及不斷增長的統計函數庫。

每個單變量分布都有其自己的子類,如下表所述。

13.1 正態連續隨機變量

隨機變量X可以取任何值的概率分布是連續的隨機變量。 位置(loc)關鍵字指定平均值。 比例(scale)關鍵字指定標準偏差。

作為rv_continuous類的一個實例,規范對象從中繼承了一系列泛型方法,并通過特定于此特定分發的細節完成它們。

要計算多個點的CDF,可以傳遞一個列表或一個NumPy數組。 看看下面的一個例子。

from scipy.stats import norm

import numpy as np

cdfarr=norm.cdf(np.array([1,-1.,0,1,3,4,-2,6]))

print(cdfarr)

執行上面示例代碼,得到以下結果 -

array([ 0.84134475, 0.15865525, 0.5 , 0.84134475, 0.9986501 ,

0.99996833, 0.02275013, 1. ])

要查找分布的中位數,可以使用百分點函數(PPF),它是CDF的倒數。 可通過使用下面的例子來理解。

from scipy.stats import norm

ppfvar=norm.ppf(0.5)

print(ppfvar)

執行上面示例代碼,得到以下結果 -

0.0

要生成隨機變量序列,應該使用size參數,如下例所示。

from scipy.stats import norm

rvsvar=norm.rvs(size=5)

print(rvsvar)

執行上面示例代碼,得到以下結果 -

[-0.25993892 1.46653546 -0.53932984 -1.22796601 0.06542478]

上述輸出不可重現。 要生成相同的隨機數,請使用seed()函數。

13.2 均勻分布

使用統一函數可以生成均勻分布。 參考下面的一個例子。

from scipy.stats import uniform

cvar=uniform.cdf([0,1,2,3,4,5],loc=1,scale=4)

print(cvar)

上述程序將生成以下輸出 -

array([ 0. , 0. , 0.25, 0.5 , 0.75, 1. ])

構建離散分布

生成隨機樣本,并將觀察到的頻率與概率進行比較。

二項分布

作為rv_discrete類的一個實例,binom對象從它繼承了一個泛型方法的集合,并通過特定于這個特定分布的細節完成它們。 參考下面的例子。

from scipy.stats import uniform

cvar=uniform.cdf([0,1,2,3,4,5],loc=1,scale=4)

print(cvar)

上述程序將生成以下輸出 -

array([ 0. , 0. , 0.25, 0.5 , 0.75, 1. ])

13.3 描述性統計

如Min,Max,Mean和Variance等基本統計數據將NumPy數組作為輸入并返回相應的結果。 下表描述了scipy.stats包中的一些基本統計函數。

其中幾個函數在scipy.stats.mstats中有一個類似的版本,它們用于掩碼數組。 參考下面給出的例子來理解這一點。

from scipy import stats

import numpy as np

x=np.array([1,2,3,4,5,6,7,8,9])

print(x.max(),x.min(),x.mean(),x.var())

上述程序將生成以下輸出 -

(9, 1, 5.0, 6.666666666666667)

T-檢驗

下面了解T檢驗在SciPy中是如何有用的。

ttest_1samp

計算一組分數平均值的T檢驗。 這是對零假設的雙面檢驗,即獨立觀測值'a'樣本的期望值(平均值)等于給定總體均值popmean,考慮下面的例子。

from scipy import stats

rvs=stats.norm.rvs(loc=5,scale=10,size=(50,2))

sta=stats.ttest_1samp(rvs,5.0)

print(sta)

上述程序將生成以下輸出 -

Ttest_1sampResult(statistic = array([-1.40184894, 2.70158009]),

pvalue = array([ 0.16726344, 0.00945234]))

比較兩個樣本

在下面的例子中,有兩個樣本可以來自相同或不同的分布,想要測試這些樣本是否具有相同的統計特性。

ttest_ind- 計算兩個獨立樣本得分的T檢驗。 對于兩個獨立樣本具有相同平均(預期)值的零假設,這是一個雙側檢驗。 該測試假設人口默認具有相同的差異。

如果觀察到來自相同或不同人群的兩個獨立樣本,可以使用這個測試。參考下面的例子。

from scipy import stats

rvs1=stats.norm.rvs(loc=5,scale=10,size=500)

rvs2=stats.norm.rvs(loc=5,scale=10,size=500)

print(stats.ttest_ind(rvs1,rvs2))

執行上面示例代碼,得到以下結果 -

Ttest_indResult(statistic = -0.67406312233650278, pvalue = 0.50042727502272966)

可以使用相同長度的新數組進行測試,但具有不同的含義。 在loc中使用不同的值并測試相同的值。

14. Scipy CSGraph

14.1 圖表示

首先,讓我們了解一個稀疏圖是什么以及它在圖表示中的作用。

稀疏圖是什么?

圖只是節點的集合,它們之間有鏈接。 圖幾乎可以代表任何事物 - 社交網絡連接,每個節點都是一個人,并且與熟人相連; 圖像,其中每個節點是像素并連接到相鄰像素; 指向一個高維分布,其中每個節點連接到最近的鄰居; 實際上你可以想象的任何其他東西。

表示圖形數據的一種非常有效的方式是在一個稀疏矩陣中: 假設名稱為G。矩陣G的大小為N×N,并且G[i,j]給出節點'i'和節點之間的連接的值'J'。 稀疏圖形包含大部分零 - 也就是說,大多數節點只有幾個連接。

在scikit-learn中使用的幾種算法激發了稀疏圖子模塊的創建,其中包括以下內容 -

Isomap - 流形學習算法,需要在圖中找到最短路徑。

分層聚類 - 基于最小生成樹的聚類算法。

譜分解 - 基于稀疏圖拉普拉斯算子的投影算法。

作為一個具體的例子,假設想要表示以下無向圖 -

該圖有三個節點,其中節點0和1通過權重2的邊連接,節點0和2通過權重1的邊連接。可以構造如下例所示的稠密,蒙板和稀疏表示,無向圖由對稱矩陣表示。

G_dense=np.array([[0,2,1],[2,0,0],[1,0,0]])

G_masked=np.ma.masked_values(G_dense,0)

from scipy.sparse import csr_matrix

G_sparse=csr_matrix(G_dense)

print(G_sparse.data)

上述程序將生成以下輸出 -

array([2, 1, 2, 1])

這與前面的圖相同,只是節點0和2通過零權重的邊連接。 在這種情況下,上面的稠密表示會導致含糊不清 - 如果零是一個有意義的值,那么如何表示非邊緣。 在這種情況下,必須使用蒙版或稀疏表示來消除歧義。

from scipy.sparse.csgraph import csgraph_from_dense

G2_data=np.array([[np.inf,2,0],[2,np.inf,np.inf],[0,np.inf,np.inf]])

G2_sparse=csgraph_from_dense(G2_data,null_value=np.inf)

print(G2_sparse.data)

上述程序將生成以下輸出 -

array([ 2., 0., 2., 0.])

使用稀疏圖的詞梯子

詞梯是劉易斯卡羅爾發明的游戲,其中單詞通過在每一步更改單個字母而鏈接在一起。 例如 -

APE → APT → AIT → BIT → BIG → BAG → MAG → MAN

在這里,分七步從“APE”到“MAN”,每次更換一個字母。 問題是 - 我們能否使用相同的規則在這些詞之間找到更短的路徑? 這個問題自然表示為一個稀疏圖形問題。 節點將對應于單個單詞,并且將創建最多不超過一個字母的單詞之間的連接。

14.2 獲取單詞列表

首先,當然,我們必須獲得有效的單詞列表。如果使用Mac,并且Mac在以下代碼塊中給出的位置具有單詞字典。 如果在其它的架構上,可能需要搜索一下才能找到你的系統字典。

wordlist=open('/usr/share/dict/words').read().split()

print(len(wordlist))

執行上面示例代碼,得到以下結果 -

205882

現在想看長度為3的單詞,選擇正確長度的單詞。 還將消除以大寫字母(專有名詞)開頭的單詞或包含撇號和連字符等非字母數字字符的單詞。 最后,確保一切都是小寫的,以便稍后進行比較。

word_list=[word for word in word_list if len(word)==3]

word_list=[word for word in word_list if word[0].islower()]

word_list=[word for word in word_list if word.isalpha()]

word_list=map(str.lower,word_list)

print(len(word_list))

執行上面示例代碼,得到以下結果 -

1185

現在,列出了1185個有效的三個字母的單詞(確切的數字可能會根據所使用的特定列表而變化)。 這些單詞中的每一個都將成為圖中的一個節點,我們將創建連接與每對單詞關聯的節點的邊,這些節點之間的差異只有一個字母。

import numpy as np

word_list=np.asarray(word_list)

word_list.dtype

word_list.sort()

word_bytes=np.ndarray((word_list.size,word_list.itemsize),

dtype='int8',

buffer=word_list.data)

print(word_bytes.shape)

執行上面示例代碼,得到以下結果 -

(1185,3)

我們將使用每個點之間的漢明距離來確定連接哪些單詞對。 漢明距離度量兩個向量之間的條目分數,它們不同:漢明距離等于1/N1/N的任何兩個單詞,其中NN是單詞階梯中連接的字母數。

from scipy.spatial.distance import pdist,squareform

from scipy.sparse import csr_matrix

hamming_dist=pdist(word_bytes,metric='hamming')

graph=csr_matrix(squareform(hamming_dist<1.5/word_list.itemsize))

比較距離時,不使用相等性,因為這對于浮點值可能不穩定。 只要字表中沒有兩個條目是相同的,不平等就會產生所需的結果。 現在,圖形已經建立,我們將使用最短路徑搜索來查找圖形中任何兩個單詞之間的路徑。

i1=word_list.searchsorted('ape')

i2=word_list.searchsorted('man')

print(word_list[i1],word_list[i2])

執行上面示例代碼,得到以下結果 -

ape, man

我們需要檢查它們是否匹配,因為如果單詞不在列表中,輸出中會有錯誤。 現在,需要在圖中找到這兩個索引之間的最短路徑。使用dijkstra算法,因為它能夠為一個節點找到路徑。

from scipy.sparse.csgraph import dijkstra

distances,predecessors=dijkstra(graph,indices=i1,return_predecessors=True)

print(distances[i2])

執行上面示例代碼,得到以下結果 -

5.0

因此,我們看到ape和man之間的最短路徑只包含五個步驟。可以使用算法返回的前輩來重構這條路徑。

path=[]

i=i2

whilei!=i1:

path.append(word_list[i])

i=predecessors[i]

path.append(word_list[i1])

print(path[::-1]i2])

上述程序將生成以下輸出 -

['ape', 'ope', 'opt', 'oat', 'mat', 'man']

15. Scipy空間

scipy.spatial包可以通過利用Qhull庫來計算一組點的三角剖分,Voronoi圖和凸殼。 此外,它包含用于最近鄰點查詢的KDTree實現以及用于各種度量中的距離計算的實用程序。

15.1 Delaunay三角

下面來了解Delaunay Triangulations是什么以及如何在SciPy中使用。

什么是Delaunay三角?

在數學和計算幾何中,對于平面中離散點的給定集合P的Delaunay三角剖分是三角形DT(P),使得P中的任何點都不在DT(P)中的任何三角形的外接圓內。

可以通過SciPy進行相同的計算。 參考下面的一個例子。

from scipy.spatial import Delaunay

points=np.array([[0,4],[2,1.1],[1,3],[1,2]])

tri=Delaunay(points)

import matplotlib.pyplot as plt

plt.triplot(points[:,0],points[:,1],tri.simplices.copy())

plt.plot(points[:,0],points[:,1],'o')

plt.show()

上述程序將生成以下輸出 -

15.2 共面點

下面了解共面點是什么以及它們如何在SciPy中使用。

什么是共面點?

共平面點是三個或更多點位于同一平面上。 回想一下,一個平面是平坦的表面,其在所有方向端延伸沒有終點。 它通常在數學教科書中顯示為四面體。

下面來看看如何在SciPy中使用它,參考下面的例子。

from scipy.spatial import Delaunay

points=np.array([[0,0],[0,1],[1,0],[1,1],[1,1]])

tri=Delaunay(points)

print(tri.coplanar)

上述程序將生成以下輸出 -

array([[4, 0, 3]], dtype = int32)

這意味著頂點4位于三角形頂點0和頂點3附近,但不包含在三角中。

15.3 凸殼

下面來了解什么是凸殼,以及它們如何在SciPy中使用。

什么是凸殼?

在數學中,歐幾里德平面或歐幾里德空間(或更一般地說,在實數上的仿射空間中)中的一組點X的凸包或凸包是包含X的最小凸集。

參考下面的例子來詳細了解它 -

from scipy.spatial import ConvexHull

points=np.random.rand(10,2) # 30 random points in 2-D

hull=ConvexHull(points)

import matplotlib.pyplot as plt

plt.plot(points[:,0],points[:,1],'o')

for simplex in hull.simplices:

plt.plot(points[simplex,0],points[simplex,1],'k-')

plt.show()

參考:https://docs.python.org/3/

https://www.yiibai.com/scipy/scipy_introduction.html

總結

以上是生活随笔為你收集整理的scipy安装_4. Python--Scipy库(下/13-17)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。