numpy安装_Python进阶之NumPy快速入门(一)
前言
NumPy是Python的一個擴(kuò)展庫,負(fù)責(zé)數(shù)組和矩陣運(yùn)行。相較于傳統(tǒng)Python,NumPy運(yùn)行效率高,速度快,是利用Python處理數(shù)據(jù)必不可少的工具。
這個NumPy快速入門系列分為四篇,包含了NumPy大部分基礎(chǔ)知識,每篇閱讀時間不長,但內(nèi)容含量高。大家最好親自碼一遍代碼,這樣可以更有收獲。
概要
第一節(jié).NumPy安裝和介紹
NumPy安裝
我們提供兩種命令安裝方法,都非常簡便:
- pip命令安裝
- conda命令安裝
這兩種安裝方法適用于Windows, Linux,以及Mac系統(tǒng)。
(1)pip命令:pip install numpy
當(dāng)終端顯示成功安裝或者已經(jīng)安裝說明numpy已經(jīng)安裝完畢。
(2)conda命令: conda install numpy
conda命令是通過Anaconda軟件來安裝NumPy。安裝好Anaconda軟件后,打開Anaconda Prompt后在里面輸入conda install numpy命令即可。
安裝完成后,為了檢驗(yàn)NumPy是否可以使用,我們用一個簡單的例子做個實(shí)驗(yàn):
代碼:
import?numpy?as?npprint?(np.eye(4))講解:
為了方便,大家一般采用import numpy as np這種調(diào)用方法,將numpy縮寫成np來使用。我們使用NumPy中的eye()函數(shù)來檢查NumPy是否已經(jīng)安裝完成,eye(N)是一個產(chǎn)生N*N的單位矩陣
運(yùn)行結(jié)果:
[[1. 0. 0. 0.]
[0. 1. 0. 0.]
[0. 0. 1. 0.]
[0. 0. 0. 1.]]
如果大家的屏幕里面也出現(xiàn)了這個結(jié)果,那么恭喜你NumPy庫已經(jīng)成功安裝,可以開始正式學(xué)習(xí)了。
NumPy和列表
我們首先要搞清楚的是,NumPy處理的對象是什么。事實(shí)上,我們把NumPy處理的對象叫ndarray,這是一個縮寫,翻譯過來叫做多維數(shù)組。ndarray類型的數(shù)據(jù)和我們之前學(xué)過的列表頗有淵源:
代碼:
import numpy as nplist?=?[1,?2,?3]arr?=?np.array(list)print?(type(list))print?(type(arr))講解:
我們首先建立一個列表,然后通過np.array函數(shù)將這個列表轉(zhuǎn)換成一個NumPy數(shù)組,通過打印這兩個變量的type信息,我們可以發(fā)現(xiàn)二者的區(qū)別和聯(lián)系。
運(yùn)行結(jié)果:
沒錯,arr變量的數(shù)據(jù)類型是ndarray。當(dāng)然,我們并不是總是通過轉(zhuǎn)換列表變成ndarray。我們想強(qiáng)調(diào)的是,雖然NumPy數(shù)組雖然和列表很類似,但是二者卻是完全不同的數(shù)據(jù)類型,因此二者使用方法也有很大不同。
Numpy比Python列表更具優(yōu)勢,其中一個優(yōu)勢便是速度。在對大型數(shù)組執(zhí)行操作時,Numpy的速度比Python列表的速度快了好幾百。因?yàn)镹umpy數(shù)組本身能節(jié)省內(nèi)存,并且Numpy在執(zhí)行算術(shù)、統(tǒng)計和線性代數(shù)運(yùn)算時采用了優(yōu)化算法。
常見數(shù)組
我們最后給大家介紹常見的幾種ndarray數(shù)組:
代碼:
a?=?np.array([1,?2,?3])b?=?np.array([[1,?2],?[3,?4]])c?=?np.array([1,?2,?3],?dtype?=?complex)print?(a)print?(b)print?(c)講解:
a是一個一維數(shù)組;b是一個二維數(shù)組;c是復(fù)數(shù)變量的一維數(shù)組。這些都是常見的ndarray,以后我們將會用NumPy提供的函數(shù)對這些常見的數(shù)組進(jìn)行處理,來完成我們想要的目標(biāo)。
運(yùn)行結(jié)果:
[1 2 3]
[[1 2]
[3 4]]
[1.+0.j 2.+0.j 3.+0.j]
第二節(jié).NumPy數(shù)組屬性
我們將幾種常見數(shù)組屬性分成以下幾種:
- 數(shù)據(jù)類型 dtype
- 元素個數(shù) size
- 維度 ndim
- 形狀 shape
- 實(shí)部和虛部 real image
NumPy支持很多不同的數(shù)據(jù)類型,從整數(shù)型(int)到浮點(diǎn)型(float),再到復(fù)數(shù)型,應(yīng)有盡有。如何判斷數(shù)組的數(shù)據(jù)類型是一件比較重要的事情,NumPy給我們提供了dtype命令來查看數(shù)據(jù)類型:
代碼:
import?numpy?as?npa?=?np.array([1,?2,?3])b?=?np.array([[1.1,?2],?[3.1,?4.2]])c?=?np.array([1,?2,?3],?dtype?=?complex)print?(a.dtype,?b.dtype,?c.dtype)講解:
我們分別建立了三個NumPy數(shù)組,a是整數(shù)型;b是浮點(diǎn)型;c是復(fù)數(shù)型。dtype既可以在創(chuàng)建數(shù)組的時候申明變量類型,也可以通過打印告訴我們數(shù)組的數(shù)據(jù)類型。
運(yùn)行結(jié)果:
int32 float64 complex128
在我們知道了NumPy數(shù)據(jù)類型后,我們還需要知道它的更多屬性來全面了解這個數(shù)組。
代碼:
b?=?np.array([[1.1,?2],?[3.1,?4.2]])c?=?np.array([1,?2,?3],?dtype?=?complex)print?(b.ndim,?b.shape,?b.size)print?(c.real,?c.imag)講解:
我們分別查看了b數(shù)組的維度,形狀,以及元素個數(shù)。我們知道b是一個2*2的浮點(diǎn)型數(shù)組,因?yàn)樗木S度是2,形狀就是行數(shù)乘以列數(shù)(2,2);元素個數(shù)是4。對于c這個復(fù)數(shù)數(shù)組,我們調(diào)用了實(shí)部(real)和虛部(imag)這個兩個屬性。
運(yùn)行結(jié)果:
2 (2, 2) 4
[1. 2. 3.] [0. 0. 0.]
第三節(jié).創(chuàng)建數(shù)組
對于NumPy數(shù)組,一般而言我們有三種創(chuàng)建方法:
我們先介紹第二種方法中常見的幾種函數(shù):
- numpy.zeros 創(chuàng)建元素全是0的數(shù)組
- numpy.ones 創(chuàng)建元素全是1的數(shù)組
- numpy.arrange 創(chuàng)建數(shù)值范圍
- numpy.linspace 創(chuàng)建數(shù)值范圍
np.zeros() & np.ones()
代碼:
e?=?np.array([1,?2,?3],?dtype=float)f?=?np.zeros((3,2),dtype=int)g?=?np.ones((1,3))print?(e)print?(f)print?(g)講解:
我們用第一種方法,創(chuàng)建了數(shù)據(jù)類型為浮點(diǎn)型(float)的數(shù)組e;然后通過第二種方法,分別創(chuàng)建了元素都是0和1的兩個數(shù)組。注意到我們可以通過dtype,以及shape等來控制數(shù)組屬性。在上面的例子中f和g,我們把shape省略了,只用(3,2)這種形式。
運(yùn)行結(jié)果:
[1. 2. 3.]
[[0 0]
[0 0]
[0 0]]
[[1. 1. 1.]]
np.arrange()
很多情況下我們非常想要得到從一個整數(shù)到另一個整數(shù)的一個數(shù)組,比如周一到周日,一天中從1點(diǎn)到24點(diǎn)等,還有從-10度到40度的溫度范圍。這時候用NumPy中的arange函數(shù)就可以幫助你達(dá)成這個目標(biāo)。
arange函數(shù)有四個輸入?yún)?shù)來調(diào)整:
- start 起始值
- stop 終止值
- step 步長(默認(rèn)是1)
- dtype 數(shù)據(jù)類型。
值得注意的是,這里的終止值是取不到的,所以真正意義上而言終止值是stop-1。
代碼:
import?numpy?as?npa?=?np.arange(5)b?=?np.arange(1,5)c?=?np.arange(1,10,2)d?=?np.arange(2,6,dtype=float)print?(a,?b,?c,?d)講解:
我們一共建立了四個數(shù)組,第一個我們只有一個參數(shù),是終止值參數(shù),這時候其他參數(shù)都是默認(rèn)的。第二個數(shù)組,我們給定了起始值和終止值。第三個數(shù)組我們增加了步長。第四個數(shù)組,我們隱藏的其實(shí)是步長,也就是取默認(rèn)值1。大家在看答案之前可以猜一下a,b,c,d分別是多少。
運(yùn)行結(jié)果:
[0 1 2 3 4] [1 2 3 4] [1 3 5 7 9] [2. 3. 4. 5.]
np.linspace()
linspace是linear space的縮寫,線性空間。和arange稍有不同的是,linspace沒有步長,相反它有個叫做num的參數(shù)來控制生成數(shù)列的總數(shù)目。也就是說,在給定起始值和終止值的時候,步長被總數(shù)目決定了。
代碼:
a?=?np.linspace(1,10,10)b?=?np.linspace(10,20,5,?endpoint?=?False)c?=?np.linspace(10,20,5,?endpoint?=?False,?retstep?=?True)print?(a)print?(b)print?(c)講解:
我們分別利用linspace建立了三個數(shù)組,第一個endpoint不賦值,默認(rèn)是True,默認(rèn)終止值是包含在內(nèi)的;第二個我們不把終止值包括在內(nèi);最后我們用retstep=True顯示數(shù)列的間距。
運(yùn)行結(jié)果:
[ 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.]
[10. 12. 14. 16. 18.]
(array([10., 12., 14., 16., 18.]), 2.0)
第三種創(chuàng)建方法:asarray() & array()
asarray函數(shù)可以將其他數(shù)據(jù)類型轉(zhuǎn)換成Numpy數(shù)組。
代碼:
a?=?[1,?2,?3]b?=?(1,?2,?3)a_1?=?np.array(a)a_2?=?np.asarray(a)b_1?=?np.array(b)b_2?=?np.asarray(b)print?(a_1,?a_2,type(a_1))print?(b_1,?b_2)講解:
我們建立了一個列表a和一個元組b,分別用np.array和np.asarray來轉(zhuǎn)換。其實(shí)在將列表和元組轉(zhuǎn)換成numpy數(shù)組的時候效果是一樣的。也就是說不論是從列表a出發(fā)得到的a_1和a_2還是從元組b出發(fā)得到的b_1和b_2都是numpy數(shù)組[1,2,3]。
但是,他們二者還是有區(qū)別的,當(dāng)數(shù)據(jù)源是ndarray,即numpy數(shù)組的時候,array會復(fù)制出一個副本,占用新的內(nèi)存,但是asarray并不會。從這里看來,對一般的程序任務(wù),我們并不太需要區(qū)分array和asarray,除非做大型數(shù)據(jù)的時候
運(yùn)行結(jié)果:
[1 2 3] [1 2 3]
[1 2 3] [1 2 3]
總結(jié)回顧
總結(jié)
以上是生活随笔為你收集整理的numpy安装_Python进阶之NumPy快速入门(一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 游戏《死亡空间》(Dead Space)
- 下一篇: 雷军晒奖杯:《小米创业思考》获2022豆