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