資料處理必修庫Numpy

2021-10-18 22:54:24 字數 4445 閱讀 3516

資料處理必修庫numpy

python的編輯器五花八門,眼花繚亂,對於新手來說,最好的就是anaconda。

如果你已經安裝了anaconda,那麼你就已經安裝了numpy,不僅如此,很多常用的庫anaconda都替你安裝好了,如pandas,這就省去了自行安裝的麻煩!

python的標準發行版或任何其他發行版,可以訪問官網獲取資訊

【編者注:蟈蟈強烈推薦使用anaconda,並且在做交流時、教師教學時也建議使用anaconda下的jupyter notebook,交流中對方可以實時地看到**的執行過程,對於學生還可以將上課的內容匯出為html網頁格式,供同學們課下複習,以對課堂知識的內容再現。很多老師害怕課堂**出問題,不敢使用實時**執行,而使用ppt教學,其實效果並不好。】

■ 01 匯入numpy

一旦啟動了乙個新的ipython(spyder)或者jupyter(notebook)會話,就可以匯入numpy模組並按照以下步驟來驗證版本:

import numpy

numpy.version

輸出結果:

1.15.4

輸出結果:

1.15.4

■ 02 理解numpy陣列

python語言的變數型別不必指定,無論何時建立乙個新變數,都會自動識別其型別。例如,下面的內容將自動表示為乙個整數:

a = 5

輸入下面type函式可以得到變數的型別:

type(a)

輸出結果:

intrange (x)函式將建立從0到x–1的所有整數,即整數範圍是左閉右開[0,x),但這些整數形象地說是儲存在容器裡,是散亂的,當你需要它時,你可對他進行調取,如你需要呼叫它為乙個列表,那就是用list來呼叫,當需要呼叫它當作元組時,就是用tuple來呼叫它。如

i_list=list(range(10))

i_list

輸出結果:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

類似地,我們通過讓python遍歷整數列表i_list中的所有元素,並對每個元素應用str()函式(該函式將乙個數轉換成乙個字串),來建立乙個字串列表:

str_list = [str(i) for i in i_list]

str_list

輸出結果:

[『0』, 『1』, 『2』, 『3』, 『4』, 『5』, 『6』, 『7』, 『8』, 『9』]

可是,用列表進行數**算並不是很靈活。例如,我們想要將i_list中的每個元素都乘以乙個因子2。執行以下操作可能是一種簡單的方法,看看輸出結果是怎樣的:

i_list * 2

輸出結果:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

其結果是將i_list自身「長度」變長了一倍,變長的部分是把原來的元素複製過來了,這並不是我們想要的!

這就是numpy的用武之地。numpy是專為簡化python中的陣列運算而設計的。我們可以快速將整數列表轉換為乙個numpy陣列:

import numpy as np

i_arr = np.array(i_list)

i_arr

輸出結果:

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

讓我們試著將陣列乘以2會怎樣:

i_arr*2

輸出結果:

array([ 0, 2, 4, 6, 8, 10, 12, 14, 16, 18])

這次是我們要的結果!加法、減法、除法以及很多其他運算也是同樣的。

而且,每個numpy陣列都具有以下屬性:

ndim:維數。

shape:每一維的大小。

size:陣列中元素的總數。

dtype:陣列的資料型別(例如int、float、string等)。

讓我們來看看整數陣列的上述屬性:

print("i_arr ndim: ", i_arr.ndim)

print("i_arr shape: ", i_arr.shape)

print("i_arr size: ", i_arr.size)

print("i_arr dtype: ", i_arr.dtype)

輸出結果:

i_arr ndim: 1

i_arr shape: (10,)

i_arr size: 10

i_arr dtype: int32

從這些輸出中,我們可以看到陣列只包含一維,其包含10個元素且所有元素都是64位的整數。當然,如果你在32位機器上執行這段**,你可能會得到dtype:int 32。

■ 03 通過索引訪問單個陣列元素

在一維陣列中,通過在方括號中指定所需的索引,可以訪問第i個值(從0開始計算),與list一樣:

i_arr

輸出結果:

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

再看:int_arr[0]

輸出結果:

0再來一次:

int_arr[0]

輸出結果:

3要從陣列的末尾建立索引,可以使用負索引號:

int_arr[-1]

輸出結果:9再如

int_arr[-3]

輸出結果:

7陣列也可以有類似於list的切片操作,如下所示:

i_arr[2:5]

輸出結果:

array([2, 3, 4])

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

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

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

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

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

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

這裡,第一維定義顏色通道(opencv中的藍色、綠色和紅色)。因此,如果這是真實的影象資料,我們可以通過陣列切片輕鬆地獲得第乙個通道中的顏色資訊:

aa3[0,:,:]

輸出結果:

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

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

在opencv中,影象要麼是值在0到1之間的32位浮點陣列,要麼是值在0到255之間的8位整數陣列。因此,使用8位整數,通過指定numpy的dtype屬性並將陣列中的所有1乘以255,我們還可以建立乙個2×4畫素、全為白色的rgb影象:

arr_3d=np.ones((3,2,4),dtype=np.uint8)*255

arr_3d

輸出結果:

array([[[255, 255, 255, 255],

[255, 255, 255, 255]],

[[255, 255, 255, 255],

[255, 255, 255, 255]],

[[255, 255, 255, 255],

[255, 255, 255, 255]]], dtype=uint8)

■ 05 修改陣列的維度

我們也可以修改陣列的「形狀」。如上面的aa3的形狀是(3,2,4),下面將其修改為(4,6)(4行6列)

aa3.reshape(4,6)

結果為:

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

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

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

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

aa3.reshape(4,6)也可以寫成aa3.reshape(4,-1)或者aa3.reshape(-1,6),這裡的-1表示不需要計算,如(4,-1)表示形狀改變為4行,至於多少列計算機自動計算;(-1,6)表示修改為6列,至於多少行計算機自動計算去,當然這裡要能夠分成行列數的乘積等於原來陣列的元素個數,如這裡原來是324=24個元素,所以就不能分成(5,-1),因為24個元素不能被份成5行,若分成5行,則不論多少列,肯定有元素多出來或者不夠用,也就是不能正好分成5行多少列。

■ 06 多維陣列的訪問

作乙個3×4的陣列

import numpy as np

a = np.arange(1,13,1).reshape(3,4)

a輸出如下:

array([[ 1, 2, 3, 4],

[ 5, 6, 7, 8],

[ 9, 10, 11, 12]])

訪問第一行的數字2,後面兩個中括號,第乙個中括號表示行號,第二個中括號表示列號:

a[0][1]

2訪問第二行資料[ 5, 6, 7, 8]:

a[1]

array([5, 6, 7, 8])

也可以用a[1][:]。

要同時訪問多行多列可以如下操作:

a[1:3][0:2]

array([[ 5, 6, 7, 8],

[ 9, 10, 11, 12]])

python資料處理庫 numpy

之前在寫python的資料處理庫的安裝教程時寫過一點介紹。但是不是很詳細,最近在整理複習,所以寫篇部落格整理下。numpy是python科學計算的基礎包,它提供 快速高效的多維陣列物件ndarray 直接對陣列執行數 算及對陣列執行元素級計算的函式 線性代數運算 隨機數生成 將c c fortran...

Python資料處理 numpy 1

python中資料處理最基礎的乙個包 numpy。它能很好的進行資料準備,類似與r語言中的資料框 dataframe 一樣。今天,就來從最基礎的開始學習。import numpy as np data 0.95,0.25,0.89 0.56,0.24,0.91 data np.array data ...

pandas資料處理庫

1 dataframe屬性 屬性或方法 描述dataframe.index dataframe的index 行標籤 dataframe.columns dataframe.columns.tolist dataframe的列標籤 將列名轉換為list結構 dataframe.dtypes 返回dat...