Numpy 模組 (未完成)
numpy是Python語言的一個擴充程式庫,在資料科學計算中是相當重要的模組
看似list,但是陣列是沒有逗號的
shape為numpy陣列所設定的「形狀」
shape(axis 0, axis 1 ,axis 2) or shape (row個數, col個數) or shape(col數)
需要建立一維或多維可使用以下函數:
函數 | 說明 |
---|---|
array(序列資料) | list或是tuple的序列資料轉換為陣列 np.array([[1,2,3], [4,5,6]]) np.array(((1,2,3), (4,5,6))) |
arange(起始值, 終止值, 間隔值) | 與range()相似,可以建立範圍或等距的整數陣列 np.arange(0, 20 ,3) [ 0 3 6 9 12 15 18] |
np.linspace(起始值, 終止值, 元素個數) | 設定範圍的等距陣列,返回float型態 np.linspace(0, 20, 3) [ 0. 10. 20.] |
np.zeros((shape)) | 根據設定的shape建立全部為0的陣列 np.zeros((2,2)) [[0. 0.] [0. 0.]] |
np.ones((shape)) | 根據設定的shape建立全部為1的陣列 np.ones((2,3)) [[1. 1. 1.] [1. 1. 1.]] |
np.empty((shape, dtype=, order=)) | 設定指定型別的陣列 dtype為資料型態,如int16、int32 order有C和F,分別為行優先和列優先 np.empty(shape=(2,2), dtype=np.int32, order=’C’) |
np.where(條件式, 條件不成立的值, 條件成立的值) | img_light = np.where((255 – img_np) < light, 255 ,img_np + light) |
Numpy的重要屬性:
屬性 | 說明 |
---|---|
shape | 取得陣列的形狀,返回值是tuple x = np.array([[1,2,3], [4,5,6]]) # x.shape 為 (2, 3) |
ndim | 取得陣列的維度 x = np.array([[1,2,3], [4,5,6]]) #x.ndim 為 2 |
size | 取得陣列中所有元素的個數,相當於各維度的乘積 x = np.array([[1,2,3], [4,5,6]]) #x.size 為 6 |
dtype | 取得陣列中所有的資料型態 x = np.array([[1,2,3], [4,5,6]]) # dtype 為 int32 |
reshape | 建立陣列後重新改變形狀 a = np.arange(1,10) # [1 2 3 4 5 6 7 8 9] a.reshape(3,3) [[1 2 3] [4 5 6] [7 8 9]] |
import numpy as np
# x是串列(list)
x = [[1,2,3], [4,5,6]]
print('x是:',type(x))
print('x[0]的值是:', x[0])
print('x[0]的型態是:', type(x))
print('x[0][1]的值是:', x[0][1])
print()
# y是陣列(array) -> numpy模組
# 將list轉成array
y = np.array(x)
print('y直接列印:', y) # 注意,沒有逗號
print('y[0]的值是:', y[0]) # [1 2 3]
print('y[0]的型態是:',type(y[0])) # <class 'numpy.ndarray'>
print('y[0][1]的值是:', y[0][1]) # 2
print('y[0][1]的型態為:',type(y[0][1])) # <class 'numpy.int32'>
print(y[0][1] + 1) # 可以進行運算,為:3
print('y * 2 為:', y * 2) # 陣列中每個數值都乘2
print()
z = np.array(((1,2,3), (4,5,6)))
print('z的型態是:',type(z)) # <class 'numpy.ndarray'>
print('z[0]的值是:', z[0]) # [1 2 3]
print('z[0][1]的值是', z[0][1]) # 2
print('z * 2 =', z * 2) # 陣列中每個數值都乘2
import numpy as np
x = np.array([[1,2,3], [4,5,6]]) # x.shape = (2, 3)
y = np.array([1,2,3]) # y.shape = (3,)
print(np.arange(0, 20 ,3)) #[ 0 3 6 9 12 15 18]
print(np.linspace(0, 20, 3)) #[ 0. 10. 20.] 為float
print(np.zeros((2,2)))
'''
[[0. 0.]
[0. 0.]]
'''
print(np.ones((2,3)))
'''
[[1. 1. 1.]
[1. 1. 1.]]
'''
print(np.empty(shape=(2,2), dtype=np.int32, order='C'))
'''
[[ 0 1076101120]
[ 0 1077149696]]
'''
陣列取值
一維陣列取值:
取單一值:
nparray[索引]
取範圍值:
nparray[起始索引:終止索引[:間隔值]]
import numpy as np
a = np.arange(1,10)
print(a) # [1 2 3 4 5 6 7 8 9] 列出全部
print(a[6]) # 7 取得索引對應值
print(a[3:7]) # [4 5 6 7] #輸出範圍
print(a[:8]) # [1 2 3 4 5 6 7 8]
print(a[5:]) # [6 7 8 9]
print(a[2:8:2]) # [3 5 7] 取得從索引2開始到索引8結束且間隔為2的內容
print(type(a[2:8:2])) # <class 'numpy.ndarray'>
print(a[:]) # 也是取得全部
print(a[6:1:-1]) # [7 6 5 4 3] 由後往前取得內容
多維陣列取值:
二維取值:
nparray[row,col]
nparray[row]
nparray[row][index][index的index]
import numpy as np
a = np.arange(1,26) # [1 ~ 25] 太長了,容我縮短
print(a)
a = a.reshape(5,5)
'''
[[ 1 2 3 4 5]
[ 6 7 8 9 10]
[11 12 13 14 15]
[16 17 18 19 20]
[21 22 23 24 25]]
'''
print(a[2,1]) # 12
print(a[1,1:3]) # 取出範圍,row1的1和2 為 [7 8]
print(a[1:3, 3]) # 取出範圍,row1和row2的col3 為 [ 9 14]
print(a[2:3, 2:3]) # 雖然只有一個數[[13]],但是因為算範圍所以給兩個括號
print(a[2:4, 2:4])
'''
[[13 14]
[18 19]]
'''
print(a[:2]) # row1~row2的值
'''
[[ 1 2 3 4 5]
[ 6 7 8 9 10]]
'''
print(a[::2]) # 全數row間隔為2的值
'''
[[ 1 2 3 4 5]
[11 12 13 14 15]
[21 22 23 24 25]]
'''
print(a[::2,::2]) # 全數row和col且間隔為2的值
'''
[[ 1 3 5]
[11 13 15]
[21 23 25]]
'''
print(a[:,2]) # 全數row且col為3的值
'''
[ 3 8 13 18 23]
'''
print(a[2,:]) # row2且全數col的值,也就是a[2]
'''
[11 12 13 14 15]
'''
print(a[:,:]) #全row和col
import numpy as np
na = np.arange(1, 17).reshape(4, 4)
print(na)
print(na[2, 3]) #12
print(na[1, 1:3]) #[6,7]
print(na[1:3, 2]) #[7,11]
print(na[1:3, 1:3]) #[[6,7],[7,11]]
print(na[::2, ::2]) #[[1,3],[9,11]],選取全部,隔兩個row和col取值,也就是row[0]、row[2]和col[0]、col[2]
print(na[:, 2]) #[3,7,11,15]
print(na[1, :]) #[5,6,7,8]
print(na[:, :]) #矩陣全部
print(na[1:3])
#----------------------------
na = np.arange(1, 17).reshape(4, 4)
print(na[2, 3]) #12
print(na[2][3]) #12
print(na[1, 1:3]) #[6,7]
print(na[1][1:3]) #[6,7]
print(na[1:3, 2]) #[7,11]
#print(na[1:3][2]) #out of bounds,超出範圍,因為na[1:3]只有兩個元素[[ 5 6 7 8],[ 9 10 11 12]],索引值沒有[2]
print(na[1:3][1]) #[ 9 10 11 12]
print(na[1:3, 1:3]) #[[6,7],[7,11]]
print(na[1:3][1:3]) #[[ 9 10 11 12]],
print(na[::2, ::2]) #[[1,3],[9,11]]
print(na[::2][::2]) #[[1 2 3 4]]
print(na[:, 2]) #[3,7,11,15]
print(na[:][2]) #[ 9 10 11 12]
print(na[1, :]) #[5,6,7,8]
print(na[1][:]) #[5,6,7,8]
print(na[:, :]) #矩陣全部
print(na[:][:]) #矩陣全部
print(na) #矩陣全部
print(na[::3][:2])
'''
有兩個元素
[[ 1 2 3 4]
[13 14 15 16]]
分別是index0和index1
[:2]意思是開頭到index1的資料,也就是全部
'''
print(na[::3][1])
'''
有兩個元素
[[ 1 2 3 4]
[13 14 15 16]]
[1]意思是取得index1的元素,也就是[13 14 15 16]
'''
print(na[::3][1][0])
'''
有兩個元素
[[ 1 2 3 4]
[13 14 15 16]]
[1]意思是取得index1的元素,也就是[13 14 15 16]
再取得index為0的數
13
'''