Liz's Blog

Python學習筆記#2:NumPy篇

| Comments

如果像我使用Mac和zsh,可能會在終端機執行jupyter notebook失敗,這可能會是$PATH沒設定到。可以試試看在~/.zshrc檔案中加入export PATH=”$HOME/anaconda3/bin:$PATH”,再重啟終端機即可。

Udemy
課程名稱:Python for Data Science and Machine Learning Bootcamp
講師:Jose Portilla

Python的索引真的有種醉了的感覺~

1.安裝NumPy套件
終端機:conda install numpy

2.在jupyter notebook載入NumPy套件
import numpy as np

3.創造NumPy陣列(Arrays)
(1)把lists轉成陣列

li = [5,6,7]
np.array(li)

mat = [[5,6,7],[5,6,7],[5,6,7]]
np.array(mat)

(2)使用內建功能產生陣列

#使用arange產生陣列,輸出特定間距的陣列,預設間距=1
np.arange(0,5)                                   #array([0, 1, 2, 3, 4])

#取0-9的陣列,間距為2
np.arange(0,10,2)                                #array([0, 2, 4, 6, 8])

#產生5個零的陣列
np.zeros(5)                                      #array([ 0.,  0.,  0.,  0.,  0.])

#產生3X3零的陣列
np.zeros((3,3))

#產生5個一的陣列
np.ones(5)                                       #array([ 1.,  1.,  1.,  1.,  1.])

#產生5X5一的陣列
np.ones((5,5))

#使用linspace以固定取樣數字取特定範圍的陣列
np.linspace(0,2,4)

#使用eye創造相同的矩陣
np.eye(3)

(3)創造隨機的陣列

#利用rand創造隨機的陣列,範圍只會落於0-1
np.random.rand(3)
np.random.rand(2,2)

#利用randn創造隨機的陣列,但樣本會屬於常態分佈
np.random.randn(5)
np.random.randn(2,2)

#利用randint創造出隨機整數的結果,預設只輸出一個值。randint(包含最低值,不含最高值)
np.random.randint(1,50)
np.random.randint(1,50,5)

(4)陣列屬性及方法

#使用reshape幫原有的陣列變形(要是原始資料數目不符變形後的陣列數則會出現錯誤)
arr = np.arange(0,9)
arr.reshape(3,3)

#取最大值
ranarr = np.random.randint(0,20,5)
ranarr.max()

#最大值的位置
ranarr.argmax()

#取最小值
ranarr.min()

#最小值位置
ranarr.argmin()

(5)Shape指的是陣列的屬性而非方法

#向量(Vector)
arr.shape                              #(9,)

#轉成1X9的陣列
arr.reshape(1,9)                       #array([[0, 1, 2, 3, 4, 5, 6, 7, 8]])

#1X9陣列
arr.reshape(1,9).shape                 #(1, 9)

#轉成9X1的陣列
arr.reshape(9,1)
arr.reshape(9,1).shape

#利用dtype得知資料形式
arr.dtype                              #dtype('int64')

4.NumPy Indexing and Selection
(1)[]

#使用[]來索引及選擇特定值
arr[4]                                 #4

#取得特定範圍(第一個元素為0,以此類推)
arr[0:3]                               #array([0, 1, 2])

(2)Broadcasting

#利用Numpy中broadcasting功能來設定特定範圍的值
arr[0:3]=101
arr

當然也可以這樣做

#重設陣列
arr = np.arange(0,9)
arr

#選擇特定範圍
slice_of_arr = arr[0:3]
slice_of_arr

#將特定範圍改成其他值
slice_of_arr[:]=101
slice_of_arr

arr

#使用copy()複製陣列
arr_copy = arr.copy()
arr_copy

(3)Indexing a 2D array (matrices)

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

#索引matrix時,可以使用arr_2d[row,col]或arr_2d[row][col]
arr_2d[0]                                                #array([1, 2, 3])
arr_2d[2,1]                                              #6

#選擇Matrix特定範圍
arr_2d[0:2,0:2]

(4)Fancy Indexing

#建立10X10的0陣列
arr2d = np.zeros((10,10))

#陣列的長度
arr_length = arr2d.shape[1]

for i in range(arr_length):
    arr2d[i] = i
    
arr2d

#Fancy indexing可以自由選擇橫排
arr2d[[1,3,5,7]]

#也可以不照順序
arr2d[[6,4,2,7]]

(5)Index其他運用

mat2 = [[0,1,2,3,4,5],[10,11,12,13,14,15],[20,21,22,23,24,25],[30,31,32,33,34,35],[40,41,42,43,44,45],[50,51,52,53,54,55]]
arr2 = np.array(mat2)
arr2

arr2[0,3:5]
arr2[4:,4:]
arr2[:,2]
arr2[2::2,::2]

(6)Selection

arr > 5

bool_arr = arr > 5
bool_arr

arr[bool_arr]
arr[arr>5]

x=5
arr[arr>x]

5.陣列運算
(1)一般運算

arr = np.arange(0,9)
arr

arr + arr
arr * arr

#除以零會得到警告,而不是錯誤
arr/arr

(2)Universal functions

#開根號
np.sqrt(arr)

#指數e^
np.exp(arr)

np.log10(arr)

Comments

comments powered by Disqus