SlideShare a Scribd company logo
NumPy(2)
Benson
NumPy(2)
★高效率且方便的科學計算的套件.
★提供大量多維矩陣和編輯函式.
★方便處理向量、矩陣等運算
★包含了數學、邏輯、排序、I/O 離散傅立葉變換、基本線性代數、基本統計運
算及隨機模擬等功能
NumPy(2)
(一)安裝 NumPy
(二)匯入(import) NumPy
(三)建立陣列與矩陣
(四)陣列與矩陣的屬性
(五)矩陣加減乘除及基本運算
(六)索引、切片、迭代、合併和分割
(七)view, shadow copy 和 deep copy 運算
(八)位元運算
(九)字串運算
(十)IO 運算
(十一)線性代數與統計
NumPy(2)
(六)索引、切片、迭代、合併和分割
============= ===============================
character description
============= ===============================
索引 元素對應的位置,透過索引可以取得相對應的元素值
切片 與索引很類似,方便快速替換索引對應的元素
迭代 提供彈性的方式來訪問所有的元素
合併 矩陣之間做合併或連結,有垂直和水平方向合併
分割 矩陣之間依不同軸向做切割,方式有垂直和水平方向
分割
===================================================
NumPy(2)
索引: 元素對應的位置
[方法]: 索引的起如值為 0,可依序遞增,或從最終值為-1,依序遞減.
1)a[index_a]:選取索引 index_a 的元素
2)a[index_a:index_b]:選取連續區間索引 index_a 到 index_b+1 的元素
[範例 1]: a = [2,4,6,8,10,12,14,16,18,20],取得索引 index_a=2
對應的元素值.
In [1]: a = np.array([2,4,6,8,10,12,14,16,18,20])
In [2]: a[2]
Out[2]: 6
NumPy(2)
[範例 2]: a = [2,4,6,8,10,12,14,16,18,20],取得索引 index_a=2
到 index_b=5 以及 index_a=-5 到 index_b=-1 所對應的元素值,.
In [1]: a = np.array([2,4,6,8,10,12,14,16,18,20])
In [2]: a[2:5]
Out[2]: array([ 6, 8, 10])
In [3]: a[-5:-1]
Out[3]: array([12, 14, 16, 18])
NumPy(2)
切片: 替換對應位置的元素
[方法]: [index_s:index_e:index_c], index_s:起始的索引,index_e:
結束的索引,index_c:替換問隔第幾個索引對應的元素值.
[範例 1]: a = [2,4,6,8,10,12,14,16,18,20],起始索引為 0,結束索引
為 9,將索引為 2 的倍數所對應的元素值均替換為 66.
In [1]: a = np.array([2,4,6,8,10,12,14,16,18,20])
In [2]: a[0:9:2]=66
In [2]: print(a)
[66 4 66 8 66 12 66 16 66 20]
NumPy(2)
[範例 2]: a = [2,4,6,8,10,12,14,16,18,20],將陣列的元素做倒序.
In [1]: a = np.array([2,4,6,8,10,12,14,16,18,20])
In [2]: a[::-1]
Out[2]: array([20, 18, 16, 14, 12, 10, 8, 6, 4, 2])
In [3]: a[::1]
Out[3]: array([ 2, 4, 6, 8, 10, 12, 14, 16, 18, 20])
NumPy(2)
迭代: 訪問所有的元素
[方法]: for i in array:,透過迴圈的方式來訪問陣列或矩陣的所有元素.
[範例 1]: a = [2,4,6,8,10,12,14,16,18,20],運用迭代來訪問所有的
元素.
In [1]: a = np.array([2,4,6])
In [2]: for i in a:
print(i)
2
4
6
NumPy(2)
[範例 2]: a = [2,4][8,10],運用迭代來訪問所有的元素.
In [1]: a = np.array([[2,4],[8,10]])
In [2]: for i in a:
print(i)
[2 4]
[ 8 10]
In [3]: for i in a.flat:
print(i)
2
4
8
10
NumPy(2)
合併: 矩陣之間做合併或連結
[方法]:
*垂直方向合併
np.vstack(), or np.concatenate(axis = 0)
*水平方向合併
np.hstack(), or np.concatenate(axis = 1)
NumPy(2)
[範例 1]: a = [2,4][6,8], b = [10,12][14,16],運用 np.vstack(),
和 np.concatenate(axis = 0)對 a 和 b 做垂直方向合併
In [1]: a = np.array([[2,4],[6,8]])
In [2]: b = np.array([[10,12],[14,16]])
In [3]: np.vstack((a, b))
Out[3]:
array([[ 2, 4],
[ 6, 8],
[10, 12],
[14, 16]])
NumPy(2)
In [4]: np.concatenate((a, b), axis = 0)
Out[4]:
array([[ 2, 4],
[ 6, 8],
[10, 12],
[14, 16]])
NumPy(2)
[範例 2]: a = [2,4][6,8], b = [10,12][14,16],運用 np.hstack(),
和 np.concatenate(axis = 1)對 a 和 b 做水平方向合併
In [1]: a = np.array([[2,4],[6,8]])
In [2]: b = np.array([[10,12],[14,16]])
In [3]: np.hstack((a, b))
Out[3]:
array([[ 2, 4, 10, 12],
[ 6, 8, 14, 16]])
In [4]: np.concatenate((a, b), axis = 1)
Out[4]:
array([[ 2, 4, 10, 12],
[ 6, 8, 14, 16]])
NumPy(2)
分割: 矩陣之間依不同軸向做切割
[方法]:
*垂直方向分割
np.vsplit(), or np.split(axis = 0)
*水平方向分割
np.hsplit(), or np.split(axis = 1)
NumPy(2)
[範例 1]: a = [2,4,6,8][10,12,14,16][18,20,22,24],運用
np.vsplit(), 和 np.split(axis = 0)對 a 做垂直方向分割
In [1]: a=np.array([[2,4,6,8],[10,12,14,16],[18,20,22,24]])
In [2]: np.vsplit(a, 3)
Out[2]:
[array([[2, 4, 6, 8]]), array([[10, 12, 14, 16]]), array([[18,
20, 22, 24]])]
In [3]: np.split(a, 3, axis = 0)
Out[3]:
[array([[2, 4, 6, 8]]), array([[10, 12, 14, 16]]), array([[18,
20, 22, 24]])]
NumPy(2)
[範例 2]: a = [2,4,6,8][10,12,14,16][18,20,22,24],運用
np.hsplit(), 和 np.split(axis = 1)對 a 做水平方向分割
In [1]: a=np.array([[2,4,6,8],[10,12,14,16],[18,20,22,24]])
In [2]: np.hsplit(a, 2)
Out[2]:
[array([[ 2, 4],
[10, 12],
[18, 20]]), array([[ 6, 8],
[14, 16],
[22, 24]])]
NumPy(2)
In [3]: np.split(a, 2, axis = 1)
Out[3]:
[array([[ 2, 4],
[10, 12],
[18, 20]]), array([[ 6, 8],
[14, 16],
[22, 24]])]
NumPy(2)
(七)view, shadow copy 和 deep copy 運算
============= ===============================
character description
============= ===============================
view 創建一個新的矩陣,修改元素值會更改原始矩陣的元
素值,但修改維度並不會更改原始矩陣的維度
shadow copy 創建一個新的矩陣,修改元素值和維度會更改原始矩
陣的元素值和維度
deep copy 創建一個新的矩陣,修改元素值和維度並不會更改原
始矩陣的元素值和維度
===================================================
NumPy(2)
view: 修改元素值會更改原始矩陣的元素值,但修改維度並不會更改原始矩陣
的維度.
[方法]: b = a.view()
[範例 1]: 運用 view()創建一個新的矩陣,並修改元素值和維度.
In [1]: a = np.arange(5)
In [2]: b_view = a.view()
In [3]: b_view.shape = 5,1
In [4]: b_view[0] = 999
NumPy(2)
In [5]: print('a=',a)
a= [999 1 2 3 4]
In [6]: print('b_view=n',b_view)
b_view=
[[999]
[ 1]
[ 2]
[ 3]
[ 4]]
NumPy(2)
shadow copy: 修改元素值和維度會更改原始矩陣的元素值和維度.
[方法]: b = a
[範例 1]: 運用 shadow copy 創建一個新的矩陣,並修改元素值和維度.
In [1]: a = np.arange(5)
In [2]: b = a
In [3]: b.shape = 5,1
In [4]: b[0] = 999
In [5]: print('a=',a)
NumPy(2)
a= [[999]
[ 1]
[ 2]
[ 3]
[ 4]]
In [6]: print('b=n',b)
b_view= [[999]
[ 1]
[ 2]
[ 3]
[ 4]]
NumPy(2)
deep copy: 修改元素值和維度並不會更改原始矩陣的元素值和維度.
[方法]: b = a.copy()
[範例 1]: 運用 copy()創建一個新的矩陣,並修改元素值和維度.
In [1]: a = np.arange(5)
In [2]: b_copy = a.copy()
In [3]: b_copy.shape = 5,1
In [4]: b_copy[0] = 999
NumPy(2)
In [5]: print('a=',a)
a= [0 1 2 3 4]
In [6]: print('b_copy=n',b_copy)
b_copy=
[[999]
[ 1]
[ 2]
[ 3]
[ 4]]
NumPy(2)
(八)位元運算
============= ===============================
character description
============= ===============================
bitwise_and 對矩陣元素執行位元 And 操作
bitwise_or 對矩陣元素執行位元 Or 操作
invert 按位元取反向
left_shift 將二進制表示的位元向左移動
right_shift 將二進制表示的位元向右移動
===================================================
NumPy(2)
bitwise_and: 執行位元 And 操作.
[方法]: np.bitwise_and()
[範例 1]: a = 10, b = 15,運用 np.bitwise_and 對 a 和 b 做二進制 and
的運算.
In [1]: a = 10
In [2]: b = 15
In [3]: np.bitwise_and(a, b)
Out[4]: 10
NumPy(2)
bitwise_or: 執行位元 Or 操作.
[方法]: np.bitwise_or()
[範例 1]: a = 10, b = 15,運用 np.bitwise_or 對 a 和 b 做二進制 or
的運算.
In [1]: a = 10
In [2]: b = 15
In [3]: np.bitwise_or(a, b)
Out[4]: 15
NumPy(2)
invert: 執行位元反向操作.
[方法]: np.invert()
[說明]:
*將 10 進制的數字轉換成 2 進制,並取反向,1 變 0,0 變 1.
*如果最高位元為 1,表示為負數
*除了最高位元保持不變,其餘位元再取反向,並對最低位元再做加 1 的動作
*再轉換成 10 進制
NumPy(2)
[範例 1]: a = 10,運用 np.invert 對 a 做二進制反向運算.
In [1]: a = 10
In [2]: bin(a)
Out[2]: '0b1010'
In [3]: bin(np.invert(a))
Out[3]: '-0b1011'
In [4]: np.invert(a)
Out[4]: -11
NumPy(2)
left_shift: 將二進制表示的位元向左移動
[方法]: np.left_shift()
[範例 1]: a = 10,運用 left_shift 對 a 的二進制位元向左移 2 個位元.
In [1]: a = 10
In [2]: bin(a)
Out[2]: '0b1010'
In [3]: np.left_shift(a, 2)
Out[3]: 40
NumPy(2)
In [4]: bin(np.left_shift(a, 2))
Out[4]: '0b101000'
NumPy(2)
right_shift: 將二進制表示的位元向右移動
[方法]: np.right_shift()
[範例 1]: a = 10,運用 right_shift 對 a 的二進制位元向右移 2 個位元.
In [1]: a = 10
In [2]: bin(a)
Out[2]: '0b1010'
In [3]: np.right_shift(a, 2)
Out[3]: 2
NumPy(2)
In [4]: bin(np.right_shift(a, 2))
Out[4]: '0b10'
NumPy(2)
(九)字串運算
★在 NumPy 也有許多的函數可以執行字串操作,介紹常用的函數.
============= ===============================
character description
============= ===============================
char.add 對兩個陣列進行字串連接
char.multiply 執行多次字串連接
char.center 搭配指定的字符於字串的前後
char.capitalize 將字串的第一個字母轉換成大寫字母
char.title 將字串中每個單字的第一個字母都轉換成大寫字母
NumPy(2)
char.lower 將字串中的每個字元都轉換成小寫字母
char.upper 將字串中的每個字元都轉換成大寫字母
char.split 以指定符號對字串做分割成數個元素
char.splitlines 以換行符號對字串做分割成數個元素
char.strip 移除元素的開頭和結尾的特定字元或符號
char.join 以指定的符號來分隔及連接陣列中的每個元素字
char.replace 使用新的字串或符號來替換元素中原本的字串
char.encode 將字串轉換成編碼後的字元和符號
char.decode 將字串進行解碼
===================================================
NumPy(2)
char.add: 對兩個陣列進行字串連接
[方法]: np.char.add()
[範例 1]: a = I m, b= Benson,運用 np.char.add 將 a 和 b 做字串連接.
In [1]: a = 'I am'
In [2]: b = ' Benson'
In [3]: np.char.add(a,b)
Out[3]: array('I am Benson', dtype='<U11')
NumPy(2)
char.multiply: 執行多次字串連接
[方法]: np.char.multiply()
[範例 1]: a = Hello! ,運用 np.char.multiply 將 a 做 3 次字串連接.
In [1]: a = 'Hello! '
In [2]: np.char.multiply(a,3)
Out[2]: array('Hello! Hello! Hello! ', dtype='<U21')
NumPy(2)
char.center: 將字串置於中間,並以指定的符號補充在字串的前後一直到所
設定的長度.
[方法]: np.char.center()
[範例 1]: a = Hello!,運用 np.char.center 以=的符號將 a 字串前後填
滿成 20 個字元.
In [1]: a = 'Hello!'
In [2]: np.char.center(a, 20, '=')
Out[2]: array('=======Hello!=======', dtype='<U20')
NumPy(2)
char.capitalize: 將字串的第一個字母轉換成大寫字母.
[方法]: np.char.capitalize()
[範例 1]: a = i am Benson.,運用 np.char.capitalize 將 a 字串的第
一個字母轉換成大寫字母.
In [1]: a = 'i am Benson.'
In [2]: np.char.capitalize(a)
Out[2]: array('I am benson.', dtype='<U12')
NumPy(2)
char.title: 將字串中的每個單字的第一個字母都轉換成大寫字母.
[方法]: np.char.title()
[範例 1]: a = i am benson.,運用 np.char.title 將 a 字串中的每個單
字的第一個字母都轉換成大寫字母.
In [1]: a = 'i am benson.'
In [2]: np.char.title(a)
Out[2]: array('I Am Benson.', dtype='<U12')
NumPy(2)
char.lower: 將字串中的每個字元都轉換成小寫字母.
[方法]: np.char.lower()
[範例 1]: a = I AM BENSON.,運用 np.char.lower 將 a 字串中的每個字
元都轉換成小寫字母.
In [1]: a = 'I AM BENSON.'
In [2]: np.char.lower(a)
Out[2]: array('i am benson.', dtype='<U12')
NumPy(2)
char.upper: 將字串中的每個字元都轉換成大寫字母.
[方法]: np.char.upper()
[範例 1]: a = i am benson.,運用 np.char.upper 將 a 字串中的每個字
元都轉換成大寫字母.
In [1]: a = 'i am benson.'
In [2]: np.char.upper(a)
Out[2]: array('I AM BENSON.', dtype='<U12')
NumPy(2)
char.split: 以指定符號對字串做分割成數個元素.
[方法]: np.char.split()
[範例 1]: a = i,am,benson.,運用 np.char.split 將 a 字串以,符號對
字串做分割成數個元素.
In [1]: a = 'i,am,benson.'
In [2]: np.char.split(a, ',')
Out[2]: array(list(['i', 'am', 'benson.']), dtype=object)
NumPy(2)
char.splitlines: 以換行符號對字串做分割成數個元素.
[方法]: np.char.splitlines()
[範例 1]: a = I am Benson.,運用 np.char.splitlines 將 a 字串以換
行符號/n, or /r 分割成數個元素.
In [1]: a = 'InamrBenson.'
In [2]: np.char.splitlines(a)
Out[2]: array(list(['I', 'am', 'Benson.']), dtype=object)
NumPy(2)
char.strip: 移除元素的開頭和結尾的特定字元或符號.
[方法]: np.char.strip()
[範例 1]: a = mI am Benson.m,運用 np.char.strip 將 a 字串的開頭和
結尾 m 字元移除.
In [1]: a = 'mI am Benson.m'
In [2]: np.char.strip(a, 'm')
Out[2]: array('I am Benson.', dtype='<U14')
NumPy(2)
char.join: 以指定的符號來分隔及連接陣列中的每個元素字元.
[方法]: np.char.join()
[範例 1]: a = Hi!, I am Benson.,運用 np.char.join 將 a 字串中的每
個字元都以-符號做分隔及連接.
In [1]: a = ['Hi!', 'I am Benson.']
In [2]: np.char.join('-', a)
Out[2]: array(['H-i-!', 'I- -a-m- -B-e-n-s-o-n-.'],
dtype='<U23')
NumPy(2)
[範例 2]: a = Hi!, I am Benson.,運用 np.char.join 將 a 字串中的第
一個元素的每個字元都以/符號做分隔及連接, 第二個元素的每個字元都以#符
號做分隔及連接.
In [1]: a = ['Hi!', 'I am Benson.']
In [2]: np.char.join(['/', '#'], a)
Out[2]: array(['H/i/!', 'I# #a#m# #B#e#n#s#o#n#.'],
dtype='<U23')
NumPy(2)
char.replace: 使用新的字串或符號來替換元素中原本的字串.
[方法]: np.char.replace()
[範例 1]: a = Hi!, I am Benson.,運用 np.char.replace 將 a 字串中
Hi!字元符號轉換成 Hello!.
In [1]: a = ['Hi!', 'I am Benson.']
In [2]: np.char.replace(a, 'Hi!', 'Hello!')
Out[2]: array(['Hello!', 'I am Benson.'], dtype='<U12')
NumPy(2)
char.encode: 將字串轉換成編碼後的字元和符號.
[方法]: np.char.encode()
[範例 1]: a = Hi!, I am Benson.,運用 np.char.encode 將 a 字串轉
換成編碼後的字元和符號,使用的是 cp500 的編碼.
In [1]: a = ['Hi!', 'I am Benson.']
In [2]: np.char.encode(a, 'cp500')
Out[2]: array([b'xc8x89O',
b'xc9@x81x94@xc2x85x95xa2x96x95K'],
dtype='|S12')
NumPy(2)
char.decode: 將字串進行解碼.
[方法]: np.char.decode()
[範例 1]: a = [b'xc8x89O',
b'xc9@x81x94@xc2x85x95xa2x96x95K'],運用
np.char.decode 將 a 字串轉換成解碼後的字符號,使用的是 cp500 的編碼.
In [1]: a = [b'xc8x89O',
b'xc9@x81x94@xc2x85x95xa2x96x95K']
In [2]: np.char.decode(a, 'cp500')
Out[2]: array(['Hi!', 'I am Benson.'], dtype='<U12')
NumPy(2)
(十)IO 運算
★在 NumPy 也有可以直接對文件進行讀取以及編寫的函數,介紹常用的函數.
============= ===============================
character description
============= ===============================
save 編寫矩陣至文件中,副檔名為.npy
load 讀取文件中的資料,副檔名為.npy
savze 編寫多個矩陣至文件中,副檔名為.npz
savetxt 編寫矩陣至文件中,副檔名為.txt
loadtxt 讀取文件中的資料,副檔名為.txt
===================================================
NumPy(2)
save: 編寫矩陣至文件中,副檔名為.npy.
[方法]: np.save()
[範例 1]: a = [2,4,6,8,10],透過 np.save 將陣列 a 寫入到
np_save_outfile.npy 檔案中.
In [1]: a = np.array([2,4,6,8,10])
In [2]: np.save('np_save_outfile.npy', a)
NumPy(2)
load: 讀取文件中的資料,副檔名為.npy.
[方法]: np.load()
[範例 1]: 透過 np.load 讀取檔案 np_save_outfile.npy 中的資料.
In [1]: np.load('np_save_outfile.npy')
Out[2]: array([ 2, 4, 6, 8, 10])
NumPy(2)
savez: 編寫多個矩陣至文件中,副檔名為.npz.
[方法]: np.savez()
[範例 1]: a = [2,4,6,8,10], b = [1,3,4,5,9]和 c = [2,14,16,18,20],
透過 np.savez 將陣列 a,b,和 c 都寫入到 np_savez_outfile.npz 檔案中.
In [1]: a = np.array([2,4,6,8,10])
In [2]: b = np.array([1,3,5,7,9])
In [3]: c = np.array([2,14,16,18,20])
In [4]: np.savez('np_savez_outfile.npz', a, b, c)
NumPy(2)
利用 np.load 來驗證多個矩陣寫入到 np_savez_outfile.npz 的內容.
In [5]: file_data = np.load("np_savez_outfile.npz")
In [6]: file_data['arr_0']
Out[6]: array([ 2, 4, 6, 8, 10])
In [7]: file_data['arr_1']
Out[7]: array([1, 3, 5, 7, 9])
In [8]: file_data['arr_2']
Out[8]: array([ 2, 14, 16, 18, 20])
NumPy(2)
savetxt: 編寫矩陣至文件中,副檔名為.txt.
[方法]: np.savetxt()
[範例 1]: a = [2,4,6,8,10],透過 np.savetxt 將陣列 a 寫入到
np_save_outfile.txt 檔案中.
In [1]: a = np.array([2,4,6,8,10])
In [2]: np.savetxt('np_save_outfile.txt', a)
NumPy(2)
loadtxt: 讀取文件中的資料,副檔名為.txt.
[方法]: np.loadtxt()
[範例 1]: 透過 np.loadtxt 讀取檔案 np_save_outfile.txt 中的資料.
In [1]: np.loadtxt('np_save_outfile.txt')
Out[2]: array([ 2., 4., 6., 8., 10.])
NumPy(2)
(十一)線性代數與統計
★在 NumPy 也有可以直接對文件進行讀取以及編寫的函數,介紹常用的函數.
============= ===============================
character description
============= ===============================
dot 兩個矩陣做點積(內積)
vdot 兩個向量做點積(內積)
inner 兩個高維度矩陣軸上的和積
cross 兩個矩陣做叉積
outer 兩個矩陣做外積
matmul 兩個矩陣的乘積
NumPy(2)
linalg.det 計算輸入矩陣的行列式
linalg.solve 計算線性方程式的 x 解
linalg.inv 計算矩陣乘法逆矩陣
amin 矩陣中指定以行或以列的最小值
amax 矩陣中指定以行或以列的最大值
ptp 矩陣中指定以行或以列的最大值-最小值
percentile 矩陣中經排序之後以行或以列為底,並輸出百分比對
應的元素值
===================================================
NumPy(2)
dot: 兩個矩陣做點積(內積).
[方法]: np.dot()
[範例 1]: a = [1, 2, 3],[3, 4, 5],[5, 6, 7], b = [2, 4, 6],[6,
8, 10],[10, 12, 14],運用 np.dot 來計算內積.
In [1]: a = np.array([[1, 2, 3],[3, 4, 5],[5, 6, 7]])
In [2]: b = np.array([[2, 4, 6],[6, 8, 10],[10, 12, 14]])
In [3]: np.dot(a,b)
NumPy(2)
Out[3]:
array([[ 44, 56, 68],
[ 80, 104, 128],
[116, 152, 188]])
NumPy(2)
vdot: 兩個向量做點積(內積).
[方法]: np.vdot()
[範例 1]: a = [1, 2, 3],[3, 4, 5],[5, 6, 7], b = [2, 4, 6],[6,
8, 10],[10, 12, 14],運用 np.vdot 來計算內積.
In [1]: a = np.array([[1, 2, 3],[3, 4, 5],[5, 6, 7]])
In [2]: b = np.array([[2, 4, 6],[6, 8, 10],[10, 12, 14]])
In [3]: np.vdot(a,b)
Out[3]: 348
NumPy(2)
inner: 兩個高維度矩陣軸上的和積.
[方法]: np.inner()
[範例 1]: a = [1, 2, 3],[3, 4, 5],[5, 6, 7], b = [2, 4, 6],[6,
8, 10],[10, 12, 14],運用 np.inner 來計算在高維度軸上的和積.
In [1]: a = np.array([[1, 2, 3],[3, 4, 5],[5, 6, 7]])
In [2]: b = np.array([[2, 4, 6],[6, 8, 10],[10, 12, 14]])
In [3]: np.inner(a,b)
NumPy(2)
Out[3]:
array([[ 28, 52, 76],
[ 52, 100, 148],
[ 76, 148, 220]])
NumPy(2)
cross: 兩個向量做叉積.
[方法]: np.cross()
[範例 1]: a = [11, 2, 3],[13, 4, 5],[15, 6, 7], b = [2, 14, 6],[6,
18, 10],[10, 22, 14],運用 np.cross 來計算叉積.
In [1]: a = np.array([[11, 2, 3],[13, 4, 5],[15, 6, 7]])
In [2]: b = np.array([[2, 14, 6],[6, 18, 10],[10, 22, 14]])
In [3]: np.cross(a,b)
NumPy(2)
Out[3]:
array([[ -30, -60, 150],
[ -50, -100, 210],
[ -70, -140, 270]])
NumPy(2)
outer: 兩個向量做外積.
[方法]: np.outer()
[範例 1]: a = [11, 2, 3],[13, 4, 5],[15, 6, 7], b = [2, 14, 6],[6,
18, 10],[10, 22, 14],運用 np.outer 來計算外積.
In [1]: a = np.array([[11, 2, 3],[13, 4, 5],[15, 6, 7]])
In [2]: b = np.array([[2, 14, 6],[6, 18, 10],[10, 22, 14]])
In [3]: np.outer(a,b)
NumPy(2)
Out[3]:
array([[ 22, 154, 66, 66, 198, 110, 110, 242, 154],
[ 4, 28, 12, 12, 36, 20, 20, 44, 28],
[ 6, 42, 18, 18, 54, 30, 30, 66, 42],
[ 26, 182, 78, 78, 234, 130, 130, 286, 182],
[ 8, 56, 24, 24, 72, 40, 40, 88, 56],
[ 10, 70, 30, 30, 90, 50, 50, 110, 70],
[ 30, 210, 90, 90, 270, 150, 150, 330, 210],
[ 12, 84, 36, 36, 108, 60, 60, 132, 84],
[ 14, 98, 42, 42, 126, 70, 70, 154, 98]])
NumPy(2)
matmul: 兩個矩陣的乘積.
[方法]: np.matmul()
[範例 1]: a = [1, 2, 3],[3, 4, 5],[5, 6, 7], b = [2, 4, 6],[6,
8, 10],[10, 12, 14],運用 np.matmul 來計算在乘積.
In [1]: a = np.array([[1, 2, 3],[3, 4, 5],[5, 6, 7]])
In [2]: b = np.array([[2, 4, 6],[6, 8, 10],[10, 12, 14]])
In [3]: np.matmul(a,b)
NumPy(2)
Out[3]:
array([[ 44, 56, 68],
[ 80, 104, 128],
[116, 152, 188]])
NumPy(2)
linalg.det: 計算輸入矩陣的行列式.
[方法]: np.linalg.det()
[範例 1]: a = [2, 2, 3],[3, 8, 5],[5, 6, 14],運用 linalg.det
來計算在行列式.
In [1]: a = np.array([[2, 2, 3],[3, 8, 5],[5, 6, 14]])
In [2]: np.linalg.det(a)
Out[2]: 64.00000000000003
NumPy(2)
linalg.solve: 計算線性方程式的 x 解.
[方法]: np.linalg.solve()
[範例 1]: a = [2, 4],[3, 5],b = [8, 14],運用 linalg.solve 來計
算 ax=b 的線性方程式的解.
In [1]: a = np.array([[2, 4],[3, 5]])
In [2]: b = np.array([8, 14])
In [3]: x = np.linalg.solve(a, b)
In [4]: print(x)
[ 8. -2.]
NumPy(2)
linalg.inv: 計算矩陣乘法逆矩陣.
[方法]: np.linalg.inv()
[範例 1]: a = [2, 4],[3, 5],運用 linalg.inv 來計算乘法逆矩陣.
In [1]: a = np.array([[2, 4],[3, 5]])
In [2]: np.linalg.inv(a)
Out[2]:
array([[-2.5, 2. ],
[ 1.5, -1. ]])
NumPy(2)
amin(): 矩陣中指定以行或以列的最小值
[方法]: amin()
[範例 1]: a = [2,4,6][8,10,12][14,16,18],運用 np.amin()來計算
最小的元素值,行的最小值和列的最小值.
In [1]: a = np.array([[2,4,6],[8,10,12],[14,16,18]])
In [2]: print(a)
array([[ 2, 4, 6],
[ 8, 10, 12],
[14, 16, 18]])
NumPy(2)
In [3]: np.amin(a)
Out[3]: 2
In [4]: np.amin(a, 0)
Out[4]: array([2, 4, 6])
In [5]: np.amin(a, 1)
Out[5]: array([ 2, 8, 14])
NumPy(2)
amax(): 矩陣中指定以行或以列的最大值
[方法]: amax()
[範例 1]: a = [2,4,6][8,10,12][14,16,18],運用 np.amax()來計算
最大的元素值,行的最大值和列的最大值.
In [1]: a = np.array([[2,4,6],[8,10,12],[14,16,18]])
In [2]: print(a)
array([[ 2, 4, 6],
[ 8, 10, 12],
[14, 16, 18]])
NumPy(2)
In [3]: np.amax(a)
Out[3]: 18
In [4]: np.amax(a, 0)
Out[4]: array([14, 16, 18])
In [5]: np.amax(a, 1)
Out[5]: array([ 6, 12, 18])
NumPy(2)
ptp(): 矩陣中指定以行或以列的最大值-最小值
[方法]: ptp()
[範例 1]: a = [2,4,6][8,10,12][14,16,18],運用 np.ptp()來計算最
大的元素值,行的最大值和列的最大值-最小值.
In [1]: a = np.array([[2,4,6],[8,10,12],[14,16,18]])
In [2]: print(a)
array([[ 2, 4, 6],
[ 8, 10, 12],
[14, 16, 18]])
NumPy(2)
In [3]: np.ptp(a)
Out[3]: 16
In [4]: np.ptp(a, 0)
Out[4]: array([12, 12, 12])
In [5]: np.ptp(a, 1)
Out[5]: array([4, 4, 4])
NumPy(2)
percentile(): 矩陣中經排序之後以行或以列,並輸出百分比對應的元素值
[方法]: percentile()
[範例 1]: a = [2,4,6][8,10,12][14,16,18],運用 np.percentile()
來計算百分比對應的元素值.
In [1]: a = np.array([[2,4,6],[8,10,12],[14,16,18]])
In [2]: print(a)
array([[ 2, 4, 6],
[ 8, 10, 12],
[14, 16, 18]])
NumPy(2)
In [3]: np.percentile(a, 50)
Out[3]: 10.0
In [4]: np.percentile(a, 50, 0)
Out[4]: array([ 8., 10., 12.])
In [5]: np.percentile(a, 50, 1)
Out[5]: array([ 4., 10., 16.])
NumPy(2)
Reference:
http://www.numpy.org/

More Related Content

PDF
Num py basic(1) - v01
PDF
Math basic - v01
PDF
Ch11 教學
PDF
Ch12 範例
PDF
Ch5 教學
PDF
Python - Matplotlib basic - v01
PDF
Ch4 教學
PDF
Ch9 教學
Num py basic(1) - v01
Math basic - v01
Ch11 教學
Ch12 範例
Ch5 教學
Python - Matplotlib basic - v01
Ch4 教學
Ch9 教學

What's hot (20)

PDF
Ch10 習題
PDF
Ch9 範例
PDF
Ch8 教學
PDF
Ch10 教學
PDF
Ch10 範例
PDF
Ch12 教學
PDF
PDF
Ch5 範例
PDF
Ch11 範例
PDF
Appendix B 範例
PDF
Python basic - v01
PDF
Ch6 教學
PDF
Ch2 教學
PDF
Ppt 1-50
PDF
Ch7 範例
PDF
Appendix B 教學
PDF
Ppt 127-135
PDF
Ch7 教學
PDF
Ppt 51-77
PDF
Appendix A 教學
Ch10 習題
Ch9 範例
Ch8 教學
Ch10 教學
Ch10 範例
Ch12 教學
Ch5 範例
Ch11 範例
Appendix B 範例
Python basic - v01
Ch6 教學
Ch2 教學
Ppt 1-50
Ch7 範例
Appendix B 教學
Ppt 127-135
Ch7 教學
Ppt 51-77
Appendix A 教學
Ad

Similar to Num py basic(2) - v01 (20)

PDF
PPTX
ncuma_pylab.pptx
PDF
Ppt 51-77
PDF
PDF
PPTX
ncuma_串列.pptx
PDF
PPTX
Python入門:5大概念初心者必備
PDF
Ch1 教學
PPTX
Python入門:5大概念初心者必備 2021/11/18
PPT
第3章矩阵及其运算
PDF
PDF
Python learn guide
PDF
PDF
PDF
Ppt 1-25
PPTX
Chapter 5 array and struct
PDF
ODP
Scilab Chap1
PDF
Ppt 78-100
ncuma_pylab.pptx
Ppt 51-77
ncuma_串列.pptx
Python入門:5大概念初心者必備
Ch1 教學
Python入門:5大概念初心者必備 2021/11/18
第3章矩阵及其运算
Python learn guide
Ppt 1-25
Chapter 5 array and struct
Scilab Chap1
Ppt 78-100
Ad

Num py basic(2) - v01