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
'''

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *