日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

4. Python--Scipy库(上/1-6)

發(fā)布時(shí)間:2024/8/1 python 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 4. Python--Scipy库(上/1-6) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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

目錄:

1. Scipy簡(jiǎn)介

? ? 1.1 子包

? ? 1.2 數(shù)據(jù)結(jié)構(gòu)

2. Scipy開(kāi)發(fā)環(huán)境安裝

? ? 2.1 Windows

? ? 2.2 Linux

3. Scipy基本功能

? ? 3.1 內(nèi)在Numpy數(shù)組創(chuàng)建

? ? 3.2 矩陣

4. Scipy簇聚

? ? 4.1 Scipy中實(shí)現(xiàn)K-Means

? ? 4.2 三個(gè)集群計(jì)算K均值

5. Scipy常量

? ? 5.1 Scipy常量包

? ? 5.2 可用常量列表

6. FFTpack

? ? 6.1 快速傅立葉變換

? ? 6.2 離散余弦變換

7. 積分

8. 插值

9. 輸入/輸出

10. Linalg

11. Ndimage

12. 優(yōu)化算法

13. 統(tǒng)計(jì)函數(shù)

14. CSGraph

15. Scipy空間

16. Scipy ODR

17. Scipy特殊包

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

1. Scipy簡(jiǎn)介

SciPy,發(fā)音為Sigh Pi,是一個(gè)科學(xué)的python開(kāi)源代碼,在BSD許可下分發(fā)的庫(kù),用于執(zhí)行數(shù)學(xué),科學(xué)和工程計(jì)算。

SciPy庫(kù)依賴(lài)于NumPy,它提供了便捷且快速的N維數(shù)組操作。 SciPy庫(kù)的構(gòu)建與NumPy數(shù)組一起工作,并提供了許多用戶(hù)友好和高效的數(shù)字實(shí)踐,例如:數(shù)值積分和優(yōu)化的例程。 它們一起運(yùn)行在所有流行的操作系統(tǒng)上,安裝快速且免費(fèi)。 NumPy和SciPy易于使用,但強(qiáng)大到足以依靠世界上一些頂尖的科學(xué)家和工程師。

1.1?SciPy子包

SciPy被組織成覆蓋不同科學(xué)計(jì)算領(lǐng)域的子包。 這些總結(jié)在下表中 -

scipy.cluster? ?矢量量化/Kmeans(https://docs.scipy.org/doc/scipy/reference/cluster.html#module-scipy.cluster,,,,以下同此)

scipy.constants? ?物理和數(shù)學(xué)常數(shù)

scipy.fftpack? ?傅里葉變換

scipy.integrate? ?集成例程

scipy.interpolate? ?插值

scipy.io? ?數(shù)據(jù)輸入和輸出

scipy.linalg? ?線性代數(shù)例程

scipy.ndimagen? ?維圖像包

scipy.odr? ?正交距離回歸

scipy.optimize? ?優(yōu)化

scipy.signal? ?信號(hào)處理

scipy.sparse? ?稀疏矩陣

scipy.spatial? ?空間數(shù)據(jù)結(jié)構(gòu)和算法

scipy.special? ?任何特殊的數(shù)學(xué)函數(shù)

scipy.stats? ?統(tǒng)計(jì)

?

1.2?數(shù)據(jù)結(jié)構(gòu)

SciPy使用的基本數(shù)據(jù)結(jié)構(gòu)是由NumPy模塊提供的多維數(shù)組。 NumPy為線性代數(shù),傅立葉變換和隨機(jī)數(shù)生成提供了一些功能,但與SciPy中等效函數(shù)的一般性不同。

?

2. Scipy開(kāi)發(fā)環(huán)境安裝

標(biāo)準(zhǔn)Python發(fā)行版不捆綁任何SciPy模塊。 一個(gè)輕量級(jí)的選擇是使用流行的Python包安裝程序安裝SciPy,

$ pip install pandas

如果安裝Anaconda Python軟件包,默認(rèn)情況下會(huì)安裝Pandas。 以下是將它們安裝在不同操作系統(tǒng)中的軟件包和鏈接。

2.1?Windows

Anaconda(來(lái)自https://www.continuum.io)是SciPy堆棧的免費(fèi)Python發(fā)行版。 它也適用于Linux和Mac。有關(guān)安裝的教程請(qǐng)參考:https://www.yiibai.com/pandas/python_pandas_environment_setup.html

Canopy(https://www.enthought.com/products/canopy/)免費(fèi)提供,以及用于Windows,Linux和Mac的完整SciPy堆棧的商業(yè)發(fā)行。

Python(x,y)- 這是一個(gè)免費(fèi)的Python發(fā)行版,其中包含用于Windows操作系統(tǒng)的SciPy堆棧和Spyder IDE。 (可從https://python-xy.github.io/下載)

?

2.2 Linux

各個(gè)Linux發(fā)行版的軟件包管理器用于在SciPy堆棧中安裝一個(gè)或多個(gè)軟件包。

Ubuntu

可以使用以下路徑在Ubuntu中安裝Python。

$ sudo apt-get install python-numpy python-scipy

python-matplotlibipythonipython-notebook python-pandas python-sympy python-nose

Shell

Fedora

可以使用以下路徑在Fedora中安裝Python。

sudo yum install numpyscipy python-matplotlibipython python-pandas

sympy python-nose atlas-devel

?

3.?Scipy基本功能

默認(rèn)情況下,所有的NumPy函數(shù)都可以通過(guò)SciPy命名空間獲得。 當(dāng)導(dǎo)入SciPy時(shí),不需要顯式導(dǎo)入NumPy函數(shù)。 NumPy的主要目標(biāo)是均勻多維數(shù)組。 它是一個(gè)元素表(通常是數(shù)字),都是相同類(lèi)型,由正整數(shù)的元組索引。 在NumPy中,大小(尺寸)被稱(chēng)為軸。 軸的數(shù)量稱(chēng)為等級(jí)。

現(xiàn)在,讓修改NumPy中的Vectors和Matrices的基本功能。 由于SciPy構(gòu)建在NumPy數(shù)組之上,因此需要了解NumPy基礎(chǔ)知識(shí)。 由于線性代數(shù)的大多數(shù)部分只處理矩陣。

NumPy向量

向量(Vector)可以通過(guò)多種方式創(chuàng)建。 其中一些描述如下。

將Python數(shù)組類(lèi)對(duì)象轉(zhuǎn)換為NumPy中的數(shù)組,看看下面的例子。

import numpy as np

list=[1,2,3,4]

arr=np.array(list)

print(arr)

執(zhí)行上面示例代碼,得到以下結(jié)果 -

[1 2 3 4]

?

3.1?內(nèi)在NumPy數(shù)組創(chuàng)建

NumPy有從頭開(kāi)始創(chuàng)建數(shù)組的內(nèi)置函數(shù)。 其中一些函數(shù)解釋如下。

使用zeros()

zeros(shape)函數(shù)將創(chuàng)建一個(gè)用指定形狀(shape)填充0值的數(shù)組。 默認(rèn)dtype是float64。 看看下面的例子。

import numpy as np

print(np.zeros((2,3)))

執(zhí)行上面示例代碼,得到以下結(jié)果 -

array([[ 0., 0., 0.],

[ 0., 0., 0.]])

?

使用ones()

ones(shape)函數(shù)將創(chuàng)建一個(gè)填充1值的數(shù)組。 它在所有其他方面與0相同。 看看下面的例子。

import numpy as np

print(np.ones((2,3)))

執(zhí)行上面示例代碼,得到以下結(jié)果 -

array([[ 1., 1., 1.],

[ 1., 1., 1.]])

使用arange()

arange()函數(shù)將創(chuàng)建具有有規(guī)律遞增值的數(shù)組。 看看下面的例子。

import numpy as np

print(np.arange(7))

執(zhí)行上面示例代碼,得到以下結(jié)果 -

array([0, 1, 2, 3, 4, 5, 6])

?

定義值的數(shù)據(jù)類(lèi)型

看看下面一段示例代碼 -

import numpy as np

arr=np.arange(2,10,dtype=np.float)

print(arr)

print("Array Data Type :",arr.dtype)

執(zhí)行上面示例代碼,得到以下結(jié)果 -

[ 2. 3. 4. 5. 6. 7. 8. 9.]

Array Data Type : float64

?

使用linspace()

linspace()函數(shù)將創(chuàng)建具有指定數(shù)量元素的數(shù)組,這些元素將在指定的開(kāi)始值和結(jié)束值之間平均間隔。 看看下面的例子。

import numpy as np

print(np.linspace(1.,4.,6))

執(zhí)行上面示例代碼,得到以下結(jié)果 -

array([ 1. , 1.6, 2.2, 2.8, 3.4, 4. ])

?

3.2?矩陣

矩陣是一個(gè)專(zhuān)門(mén)的二維數(shù)組,通過(guò)操作保留其2-D特性。 它有一些特殊的運(yùn)算符,如*(矩陣乘法)和**(矩陣冪值)。 看看下面的例子。

import numpy as np

print(np.matrix('1 2; 3 4'))

執(zhí)行上面示例代碼,得到以下結(jié)果 -

matrix([[1, 2],

[3, 4]])

矩陣的共軛轉(zhuǎn)置

此功能返回自我的(復(fù)數(shù))共軛轉(zhuǎn)置。 看看下面的例子。

import numpy as np

mat=np.matrix('1 2; 3 4')

print(mat.H)

執(zhí)行上面示例代碼,得到以下結(jié)果 -

matrix([[1, 3],

? ? ? ? [2, 4]])

?

矩陣的轉(zhuǎn)置

此功能返回自身的轉(zhuǎn)置。看看下面的例子。

import numpy as np

mat=np.matrix('1 2; 3 4')

print(mat.T)

執(zhí)行上面示例代碼,得到以下結(jié)果 -

matrix([[1, 3],

? ? ? ? [2, 4]])

?

當(dāng)轉(zhuǎn)置一個(gè)矩陣時(shí),我們創(chuàng)建一個(gè)新的矩陣,其行是原始的列。 另一方面,共軛轉(zhuǎn)置為每個(gè)矩陣元素交換行和列索引。 矩陣的逆矩陣是一個(gè)矩陣,如果與原始矩陣相乘,則產(chǎn)生一個(gè)單位矩陣。

?

4.?Scipy簇聚

K均值聚類(lèi)是一種在一組未標(biāo)記數(shù)據(jù)中查找聚類(lèi)和聚類(lèi)中心的方法。 直覺(jué)上,我們可以將一個(gè)群集(簇聚)看作 - 包含一組數(shù)據(jù)點(diǎn),其點(diǎn)間距離與群集外點(diǎn)的距離相比較小。 給定一個(gè)K中心的初始集合,K均值算法重復(fù)以下兩個(gè)步驟 -

對(duì)于每個(gè)中心,比其他中心更接近它的訓(xùn)練點(diǎn)的子集(其聚類(lèi))被識(shí)別出來(lái)。

計(jì)算每個(gè)聚類(lèi)中數(shù)據(jù)點(diǎn)的每個(gè)要素的平均值,并且此平均向量將成為該聚類(lèi)的新中心。

重復(fù)這兩個(gè)步驟,直到中心不再移動(dòng)或分配不再改變。 然后,可以將新點(diǎn)x分配給最接近的原型的群集。 SciPy庫(kù)通過(guò)集群包提供了K-Means算法的良好實(shí)現(xiàn)。 下面來(lái)了解如何使用它。

4.1?SciPy中實(shí)現(xiàn)K-Means

我們來(lái)看看并理解如何在SciPy中實(shí)現(xiàn)K-Means。

導(dǎo)入K-Means

下面來(lái)看看每個(gè)導(dǎo)入的函數(shù)的實(shí)現(xiàn)和用法。

from SciPy.cluster.vq import kmeans,vq,whiten

?

數(shù)據(jù)生成

我們需要生成(模擬)一些數(shù)據(jù)來(lái)探索聚類(lèi)。參考以下代碼 -

from numpy import vstack,array

from numpy.random impor trand

# data generation with three features?

data=vstack((rand(100,3)+array([.5,.5,.5]),rand(100,3)))

現(xiàn)在,我們來(lái)看看生成的模擬數(shù)據(jù),上述程序?qū)⑸梢韵螺敵觥?/p>

[[ 1.34103331? 1.13924682? 0.68465819]

[ 1.28481332? 0.91318917? 0.84225546]

[ 0.96498008? 1.42382266? 0.83564809]

[ 1.37049373? 0.66635033? 1.46568707]

[ 0.87424166? 0.86090225? 1.22545336]

[ 1.0264795? 0.90724604? 1.46837972]

[ 1.40996857? 1.37769991? 1.39805802]

[ 0.964556? ? 0.71632157? 1.47983347]

[ 0.69909637? 1.21695335? 1.46434369]

[ 1.01887602? 0.86448455? 1.02242951]

[ 0.82573176? 1.19165063? 1.09085707]

[ 0.64378227? 0.70673944? 0.69484097]

[ 1.16087103? 0.64371977? 0.89720984]

[ 1.23410673? 0.56805382? 1.33534058]

[ 0.50417695? 1.29632466? 0.96589447]

[ 0.91395183? 1.39173555? 1.0748435 ]

[ 1.04540644? 1.20721464? 0.97173727]

... ...

[ 0.79250839? 0.48689797? 0.42250824]

[ 0.05846914? 0.83469742? 0.57586067]

[ 0.0308333? 0.8642561? 0.1111777 ]

[ 0.61327069? 0.43425013? 0.99716439]

[ 0.81698148? 0.91098877? 0.12706862]

[ 0.60665992? 0.55999208? 0.57454962]

[ 0.13894142? 0.03315365? 0.43182983]

[ 0.62293781? 0.34701877? 0.61229591]]

根據(jù)每個(gè)要素標(biāo)準(zhǔn)化一組觀察值。 在運(yùn)行K-Means之前,使用白化重新縮放觀察集的每個(gè)特征維度是有好處的。 每個(gè)特征除以所有觀測(cè)值的標(biāo)準(zhǔn)偏差以給出其單位差異。

美化數(shù)據(jù)

我們可使用以下代碼來(lái)美白數(shù)據(jù)。

# whitening of data

data=whiten(data)

print(data)

?

4.2?用三個(gè)集群計(jì)算K均值

現(xiàn)在使用以下代碼計(jì)算三個(gè)群集的K均值。

# computing K-Means with K = 3 (2 clusters)

centroids,_=kmeans(data,3)

上述代碼對(duì)形成K個(gè)簇的一組觀測(cè)向量執(zhí)行K均值。 K-Means算法調(diào)整質(zhì)心直到不能獲得足夠的進(jìn)展,即失真的變化,因?yàn)樽詈笠淮蔚∮谀硞€(gè)閾值。 在這里,可以通過(guò)使用下面給出的代碼打印centroids變量來(lái)觀察簇。

print(centroids)

上面的代碼將生成以下輸出。

print(centroids)[[2.260347021.439243351.3697022][2.637885722.814464622.85163854][0.735072561.308018551.44477558]]

使用下面給出的代碼將每個(gè)值分配給一個(gè)集群。

# assign each sample to a cluster

clx,_=vq(data,centroids)

vq函數(shù)將'M'中的每個(gè)觀察向量與'N'obs數(shù)組與centroids進(jìn)行比較,并將觀察值分配給最近的聚類(lèi)。 它返回每個(gè)觀察和失真的聚類(lèi)。 我們也可以檢查失真。使用下面的代碼檢查每個(gè)觀察的聚類(lèi)。

# check clusters of observation

print(clx)

上面的代碼將生成以下輸出。

array([1,1,0,1,1,1,0,1,0,0,1,1,1,0,0,1,1,0,0,1,0,2,0,2,0,1,1,1,0,0,1,1,0,0,1,1,0,0,0,0,1,1,0,0,1,1,0,0,1,0,1,0,0,0,1,1,0,0,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,2,1,2,2,2,2,2,2,2,2,0,2,0,2,2,2,2,2,0,0,2,2,2,1,0,2,0,2,2,2,2,2,2,2,2,2,0,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,0,2,0,2,2,2,2,2,2,2,2,2,0,2,2,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2],dtype=int32)

Python

上述數(shù)組的不同值 0,1,2表示簇。

?

5.?Scipy常量

SciPy常量(constant)包提供了廣泛的常量,用于一般科學(xué)領(lǐng)域。

5.1?SciPy常量包

scipy.constants包提供了各種常量。必須導(dǎo)入所需的常量并根據(jù)需要來(lái)使用它們。下面看看這些常量變量是如何導(dǎo)入和使用的。

首先,通過(guò)下面的例子來(lái)比較'pi'值。

#Import pi constant from both the packages

import scipy

import math

print("sciPy - pi = %.16f"%scipy.constants.pi)

print("math - pi = %.16f"%math.pi)

執(zhí)行上面示例代碼,得到以下結(jié)果 -

sciPy - pi = 3.1415926535897931

math - pi = 3.1415926535897931

?

5.2?可用的常量列表

下表簡(jiǎn)要介紹了各種常數(shù)(常量)。

數(shù)學(xué)常量

物理常量

下表列出了最常用的物理常量。

單位

下表列出了SI單位。

這些單位范圍從yotta,zetta,exa,peta,tera ...... kilo,hector,... nano,pico,...到zepto。

其他重要常量

下表列出了SciPy中使用的其他重要常量。

要記住所有這些都有點(diǎn)困難。可使用scipy.constants.find()方法獲取指定鍵的簡(jiǎn)單方法。 看看下面的例子。

import scipy.constants

res=scipy.constants.physical_constants["alpha particle mass"]

print(res)

執(zhí)行上面示例代碼,得到以下結(jié)果 -

(6.64465723e-27, 'kg', 8.2e-35)

?

6. Scipy FFTpack

對(duì)時(shí)域信號(hào)計(jì)算傅里葉變換以檢查其在頻域中的行為。 傅里葉變換可用于信號(hào)和噪聲處理,圖像處理,音頻信號(hào)處理等領(lǐng)域。SciPy提供fftpack模塊,可讓用戶(hù)計(jì)算快速傅立葉變換。

以下是一個(gè)正弦函數(shù)的例子,它將用于使用fftpack模塊計(jì)算傅里葉變換。

6.1?快速傅立葉變換

下面來(lái)了解一下快速傅立葉變換的細(xì)節(jié)。

一維離散傅立葉變換

長(zhǎng)度為N的序列x [n]的FFT y [k]由fft()計(jì)算,逆變換使用ifft()計(jì)算。 看看下面的例子

#Importing the fft and inverse fft functions from fftpackage

from scipy.fftpack import fft

?

#create an array with random n numbers

x=np.array([1.0,2.0,1.0,-1.0,1.5])

?

#Applying the fft function

y=fft(x)

print(y)

執(zhí)行上面示例代碼,得到以下結(jié)果 -

[ 4.50000000+0.j? ? ? ? ? 2.08155948-1.65109876j? -1.83155948+1.60822041j

-1.83155948-1.60822041j? 2.08155948+1.65109876j]

?

再看另一個(gè)示例 -

#Importing the fft and inverse fft functions from fftpackage from scipy.fftpack import fft

from scipy.fftpack import ifft

#create an array with random n numbers

x=np.array([1.0,2.0,1.0,-1.0,1.5])

#Applying the fft function

y=fft(x)

#FFT is already in the workspace, using the same workspace to for inverse transform

yinv=ifft(y)

print(yinv)

執(zhí)行上面示例代碼,得到以下結(jié)果 -

[ 1.0+0.j? 2.0+0.j? 1.0+0.j -1.0+0.j? 1.5+0.j]

?

scipy.fftpack模塊允許計(jì)算快速傅立葉變換。 作為一個(gè)例子,一個(gè)(嘈雜的)輸入信號(hào)可能看起來(lái)如下 -

import numpy as np?

time_step=0.02

period=5

time_vec=np.arange(0,20,time_step)

sig=np.sin(2*np.pi/period*time_vec)+0.5*np.random.randn(time_vec.size)

print(sig.size)

我們正以0.02秒的時(shí)間步長(zhǎng)創(chuàng)建一個(gè)信號(hào)。 最后一條語(yǔ)句顯示信號(hào)sig的大小。 輸出結(jié)果如下 -

1000

?

我們不知道信號(hào)頻率; 只知道信號(hào)sig的采樣時(shí)間步長(zhǎng)。 信號(hào)應(yīng)該來(lái)自實(shí)際函數(shù),所以傅里葉變換將是對(duì)稱(chēng)的。scipy.fftpack.fftfreq()函數(shù)將生成采樣頻率,scipy.fftpack.fft()將計(jì)算快速傅里葉變換。

下面通過(guò)一個(gè)例子來(lái)理解這一點(diǎn)。

from scipy import fftpack

sample_freq=fftpack.fftfreq(sig.size,d=time_step)

sig_fft=fftpack.fft(sig)

print(sig_fft)

執(zhí)行上面示例代碼,得到以下結(jié)果 -

array([

? 25.45122234 +0.00000000e+00j,? 6.29800973 +2.20269471e+00j,

? 11.52137858 -2.00515732e+01j,? 1.08111300 +1.35488579e+01j,

? …….])

?

6.2?離散余弦變換

離散余弦變換(DCT)根據(jù)以不同頻率振蕩的余弦函數(shù)的和表示有限數(shù)據(jù)點(diǎn)序列。 SciPy提供了一個(gè)帶有函數(shù)idct的DCT和一個(gè)帶有函數(shù)idct的相應(yīng)IDCT。看看下面的一個(gè)例子。

from scipy.fftpack import dct

mydict=dct(np.array([4.,3.,5.,10.,5.,3.]))

print(mydict)

執(zhí)行上面示例代碼,得到以下結(jié)果 -

[ 60.? ? ? ? ? -3.48476592? ?-13.85640646? ? 11.3137085? ? 6.? ? ? ? ? -6.31319305]

?

逆離散余弦變換從其離散余弦變換(DCT)系數(shù)重建序列。idct函數(shù)是dct函數(shù)的反函數(shù)。 可通過(guò)下面的例子來(lái)理解這一點(diǎn)。

from scipy.fftpack import dct?

from scipy.fftpack importi dct

d=idct(np.array([4.,3.,5.,10.,5.,3.]))

print(d)

執(zhí)行上面示例代碼,得到以下結(jié)果 -

[ 39.15085889 -20.14213562? -6.45392043? 7.13341236? 8.14213562

?

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

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

總結(jié)

以上是生活随笔為你收集整理的4. Python--Scipy库(上/1-6)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。