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/

Num py basic(2) - v01