SlideShare a Scribd company logo
python 程式設計
python 簡要講義
國立中央大學數學系 吳維漢
第 十二 講
NumPy 科學運算套件 (二)
12 NumPy 套件(二)
結構陣列 (一)
 陣列元素有個別型別與名稱,如同 C 的 struct 一樣。若不設名稱,
則預設為 f0,f1, . . . 。
 結構陣列元素的名稱與型別可使用 dtype 取得
 取得結構陣列元素個別名稱所有資料
2
>>> a = np.zeros(3,"float, int")
>>> a
array([(0.0, 0), (0.0, 0), (0.0, 0)],
dtype=[(’f0’, ’<f8’), (’f1’, ’<i8’)])
>>> a.dtype
dtype([(’f0’, ’<f8’), (’f1’, ’<i8’)])
>>> a[’f1’]
array([0, 0, 0])
以上的 ’<f8’ 代表為浮點數佔用 8 位元組,使用 little-endian 方式儲存。
若是 ’>f8’ 則是使用 big-endian。
12 NumPy 套件(二)
結構陣列 (二)
 可先設定各個元素的 dtype ,再定義陣列
 物件名稱字典可直接取用或設定資料
3
>>> dt = np.dtype( [( ’x’ , ’i’) , ( ’y’ , ’f8’ )])
>>> a = np.ones(3,dt)
>>> a
array([(1, 1.0), (1, 1.0), (1, 1.0)],
dtype=[(’x’, ’<i4’), (’y’, ’<f8’)])
>>> a[’x’]
array([1, 1, 1], dtype=int32)
>>> dt = np.dtype( [( ’x’ , ’f8’) , ( ’y’ , ’f8’ )])
>>> a = np.empty(11,dt)
>>> a[’x’] = np.linspace(0,2.5,len(a))
>>> a[’y’] = a[’x’]**2
>>> a
array([(0.0, 0.0), (0.25, 0.0625), (0.5, 0.25), (0.75, 0.5625),
(1.0, 1.0),(1.25, 1.5625), (1.5, 2.25), (1.75, 3.0625),
(2.0, 4.0),(2.25, 5.0625), (2.5, 6.25)],
dtype=[(’x’, ’<f8’), (’y’, ’<f8’)])
12 NumPy 套件(二)
讀寫檔案 (一)
 np.loadtxt(fname,...):由 fname 檔案讀入資料
4
12 NumPy 套件(二)
讀寫檔案 (二)
假設為累積雨量檔案,每列的第一個欄位為時間,之後十個欄位為
不同測站所量測到以兩小時為單位的累積兩量(mm)。
5
# AM
2017-03-31:02 0 0 0 0 0 0 0 0 0 0
2017-03-31:04 0 0 0 0 0 0 0 0 0 0
2017-03-31:06 0 0 0 0 0 0 0 0 0 0
2017-03-31:08 0 0 0 0 0 0 0 0 0 0
2017-03-31:10 0 0 0 0 0 0 0 0 0 0
2017-03-31:12 0 0 0 0 0 0 0 0 0 0
# PM
2017-03-31:14 1 6 3 0 0 1 0 0 0 0
2017-03-31:16 3 2 0 0 0 0 0 0 0 0
2017-03-31:18 0 0 0 0 0 0 0 0 0 2
2017-03-31:20 15 10 8 6 5 8 6 4 3 4
2017-03-31:22 4 3 5 7 7 6 10 6 2 5
2017-03-31:24 8 6 5 6 5 6 8 7 4 4
12 NumPy 套件(二)
讀寫檔案 (三)
 讀入檔案資料成二維陣列:各直列存入字典,預設索引為
f0, f1, f2, ...
6
>>> dts = "S13" + ",f8" * 10
>>> a = np.loadtxt("rainfall2.dat",dts)
>>> a
a
array([(b’2017-03-31:02’, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0),
(b’2017-03-31:04’, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0),
(b’2017-03-31:06’, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0),
(b’2017-03-31:08’, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0),
(b’2017-03-31:10’, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0),
(b’2017-03-31:12’, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0),
(b’2017-03-31:14’, 1.0, 6.0, 3.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0),
(b’2017-03-31:16’, 3.0, 2.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0),
(b’2017-03-31:18’, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2.0),
(b’2017-03-31:20’, 15.0, 10.0, 8.0, 6.0, 5.0, 8.0, 6.0, 4.0, 3.0, 4.0),
(b’2017-03-31:22’, 4.0, 3.0, 5.0, 7.0, 7.0, 6.0, 10.0, 6.0, 2.0, 5.0),
(b’2017-03-31:24’, 8.0, 6.0, 5.0, 6.0, 5.0, 6.0, 8.0, 7.0, 4.0, 4.0)],
dtype=[(’f0’, ’S13’), (’f1’, ’<f8’), (’f2’, ’<f8’), (’f3’, ’<f8’),
(’f4’, ’<f8’), (’f5’, ’<f8’), (’f6’, ’<f8’), (’f7’, ’<f8’),
(’f8’, ’<f8’), (’f9’, ’<f8’), (’f10’, ’<f8’)])
12 NumPy 套件(二)
讀寫檔案 (四)
7
>>> a[’f0’]
array([b’2017-03-31:02’, b’2017-03-31:04’, b’2017-03-31:06’,
b’2017-03-31:08’, b’2017-03-31:10’, b’2017-03-31:12’,
b’2017-03-31:14’, b’2017-03-31:16’, b’2017-03-31:18’,
b’2017-03-31:20’, b’2017-03-31:22’, b’2017-03-31:24’],
dtype=’|S13’)
>>> a[’f1’]
array([ 0., 0., 0., 0., 0., 0.,
1., 3., 0., 15., 4., 8.])
>>> sum(a[’f1’])
31.0
>>> raining = a[’f1’] > 0
>>> raining
array([False, False, False, False, False, False, True, True, False, True,
True, True], dtype=bool)
>>> a[’f1’][raining] # 取出有第一個測站有下雨的雨量
array([ 1., 3., 15., 4., 8.])
>>> a[’f0’][raining] # 取出有第一個測站有下雨的時段
array([b’2017-03-31:14’, b’2017-03-31:16’, b’2017-03-31:20’,
b’2017-03-31:22’, b’2017-03-31:24’],
dtype=’|S13’)
12 NumPy 套件(二)
讀寫檔案 (五)
 僅取出前兩個測站的時雨量:
8
>>> a , b = np.loadtxt("rainfall2.dat",usecols=(1,2),unpack=True)
>>> a
array([ 0., 0., 0., 0., 0., 0.,
1., 3., 0., 15., 4., 8.])
>>> b
array([ 0., 0., 0., 0., 0., 0.,
6., 2., 0., 10., 3., 6.])
12 NumPy 套件(二)
讀寫檔案 (六)
 若要加取出日期時間字串,須個別設定取出欄位的資料型別:
9
>>> dts = "S13,f8"
>>> dhr , b = np.loadtxt("rainfall2.dat",usecols=(0,2),
dtype=dts,unpack=True)
>>> dhr
array([b’2017-03-31:02’, b’2017-03-31:04’, b’2017-03-31:06’,
b’2017-03-31:08’, b’2017-03-31:10’, b’2017-03-31:12’,
b’2017-03-31:14’, b’2017-03-31:16’, b’2017-03-31:18’,
b’2017-03-31:20’, b’2017-03-31:22’, b’2017-03-31:24’],
dtype=’|S13’)
>>> b
array([ 0., 0., 0., 0., 0., 0.,
6., 2., 0., 10., 3., 6.])
以上 dhr 所取得陣列元素為 bytes 型別,字元資料不可變更。
12 NumPy 套件(二)
讀寫檔案 (七)
 設定欄位索引取出資料
10
>>> dts = np.dtype([(’dtime’,’S13’),(’rstation1’,’f8’)])
>>> a = np.loadtxt("rainfall2.dat",usecols=(0,1),dtype=dts)
>>> a[’dtime’]
array([b’2017-03-31:02’, b’2017-03-31:04’, b’2017-03-31:06’,
b’2017-03-31:08’, b’2017-03-31:10’, b’2017-03-31:12’,
b’2017-03-31:14’, b’2017-03-31:16’, b’2017-03-31:18’,
b’2017-03-31:20’, b’2017-03-31:22’, b’2017-03-31:24’],
dtype=’|S13’)
>>> a[’rstation1’]
array([ 0., 0., 0., 0., 0., 0.,
1., 3., 0., 15., 4., 8.])
12 NumPy 套件(二)
排序 (一)
 foo.sort():對最後分量(最裡層中括號)排序
 一維陣列
 多維陣列
11
>>> a = np.array([1,3,5])
>>> a.sort()
>>> a
array([1, 3, 5])
>>> a = np.array( [[3,2,7], [4,1,3]] )
>>> a.sort()
>>> a
array([[2, 3, 7],
[1, 3, 4]])
>>> b = np.array( [[[3,2,4],[9,3,1]],[[5,2,6],[1,4,2]] ] )
>>> b.sort()
>>> b
array([[[2, 3, 4],
[1, 3, 9]],
[[2, 5, 6],
[1, 2, 4]]])
12 NumPy 套件(二)
排序 (二)
 foo.sort(axis=n):
在其他分量下標位置相同下,對第 n 個分量排序
12
>>> a = np.array( [[3,2,7], [4,1,3]] )
>>> a.sort(axis=0) # 垂直方向排序
>>> a
array([[3, 1, 3],
[4, 2, 7]])
 三維或以上維度的陣列,對非最後分量的排序變得不直覺。
12 NumPy 套件(二)
排序 (三)
13
>>> b = np.array( [[[3,1,4],[2,5,9]],[[9,0,8],[7,3,6]]])
>>> b
array([[[3, 1, 4],
[2, 5, 9]],
[[9, 0, 8],
[7, 3, 6]]])
>>> b.sort(axis=0)
>>> b
array([[[3, 0, 4],
[2, 3, 6]],
[[9, 1, 8],
[7, 5, 9]]])
以上的 b 元素下標依次序分別為:
3 1 4 b[0,0,0] b[0,0,1] b[0,0,2]
2 5 9 ---> b[0,1,0] b[0,1,1] b[0,1,2]
9 0 8 b[1,0,0] b[1,0,1] b[1,0,2]
7 3 6 b[1,1,0] b[1,1,1] b[1,1,2]
對第一個分量排序,即是在其餘分量下標位置不變下,調整順序。因此,3 與 9 比大小, 1 與 0 比大
小,4 與 8 比大小, 2 與 7 比大小,5 與 3 比大小,9 與 6 比大小。同樣分析方式也適用在對第二
個分量數字排序。
12 NumPy 套件(二)
排序 (四)
 np.sort(foo,axis=n):
根據第 n 個分量排序,回傳排序後的陣列,原始 foo 陣列不變。
若不設定 axis 則對最後分量排序。
 np.argsort(foo):回傳排序後的下標位置陣列,foo 陣列不變
14
>>> a = np.array( [[3,1,4],[8,5,7]] )
>>> np.sort(a) # 送出排序後的結果
array([[1, 3, 4],
[5, 7, 8]])
>>> a # 原陣列不變
array([[3, 1, 4],
[8, 5, 7]])
>>> a = np.array([8,5,9,0])
>>> np.argsort(a)
array([3, 1, 0, 2])
>>> a[np.argsort(a)] # 透過排序後的下標位置得到排序後陣列
array([0, 5, 8, 9])
>>> a # 原陣列不變
array([8, 5, 9, 0])
12 NumPy 套件(二)
排序 (五)
 np.searchsorted(foo,a):
在已排序 foo 陣列內找尋大於等於 a 且最接近 a 的
下標位置
 np.searchsorted(foo,b):同上,但 b 為串列
15
>>> a = np.array([1,2,4,6])
>>> np.searchsorted(3) # a[2] >= 3
2
>>> np.searchsorted(a,[3,7,4,0])
array([2, 4, 2, 0])
 若輸入的數比 foo 陣列內所有的數都大,則回傳 len(foo)
12 NumPy 套件(二)
邏輯運算與比較 (一)
 np.all(foo):檢查 foo 陣列的每個元素是否都為 True
 np.any(foo):檢查 foo 陣列中有個元素為 True
 np.isreal(foo):檢查 foo 陣列的元素是否為實數
 np.iscomplex(foo):檢查 foo 陣列的元素是否為複數
16
>>> np.all( np.array([2,0,1]) )
False
>>> np.any( np.array([0,0,3]) )
True
>>> np.isreal( np.array( [1,2+j,3] ) )
False
>>> np.iscomplex( np.array( [1,2+1j,3] ) )
True
 複數的虛數部份如果為 1,仍需寫上 1,不得省略。
邏輯運算與比較 (二)
17
12 NumPy 套件(二)
邏輯運算與比較 (三)
18
>>> a = np.array( [1.e10, 2e-8] )
>>> b = np.array( [1.0001e10, 1e-8] )
>>> np.isclose( a , b )
array([False, True], dtype=bool)
>>> np.allclose( a , b )
False
>>> c = np.array( [1.000001e10, 1e-8] )
>>> np.allclose(a,c)
True
>>> np.isclose(a,c,rtol=1e-8) # 重新設定 rtol 數值
array([False, True], dtype=bool)
>>> a = np.array( [np.nan,10] )
>>> b = np.array( [np.nan,15] )
>>> np.isclose(a,b)
array([False, False], dtype=bool)
>>> np.isclose(a,b,equal_nan=True)
array([ True, False], dtype=bool)
 如果兩數字為 np.nan,則預設數值上不相等,但可設定 equal_nan=True 使其相等

More Related Content

What's hot

Ch11 教學
Ch11 教學Ch11 教學
Ch11 教學
hungchiayang1
 
Ch12 範例
Ch12 範例Ch12 範例
Ch12 範例
hungchiayang1
 
Ch11 範例
Ch11 範例Ch11 範例
Ch11 範例
hungchiayang1
 
Ch9 教學
Ch9 教學Ch9 教學
Ch9 教學
hungchiayang1
 
Ppt 1-50
Ppt 1-50Ppt 1-50
Ppt 1-50
hungchiayang1
 
Ch9 範例
Ch9 範例Ch9 範例
Ch9 範例
hungchiayang1
 
Ch10 範例
Ch10 範例Ch10 範例
Ch10 範例
hungchiayang1
 
Ch10 習題
Ch10 習題Ch10 習題
Ch10 習題
hungchiayang1
 
Ch2 教學
Ch2 教學Ch2 教學
Ch2 教學
hungchiayang1
 
Appendix B 教學
Appendix B 教學Appendix B 教學
Appendix B 教學
hungchiayang1
 
Ppt 51-77
Ppt 51-77Ppt 51-77
Ppt 51-77
hungchiayang1
 
Sym py edu
Sym py eduSym py edu
Sym py edu
Alisha Smile
 
Ch1 教學
Ch1 教學Ch1 教學
Ch1 教學
hungchiayang1
 
Appendix B 範例
Appendix B 範例Appendix B 範例
Appendix B 範例
hungchiayang1
 
Ppt 138-142
Ppt 138-142Ppt 138-142
Ppt 138-142
hungchiayang1
 
Ppt 26-50
Ppt 26-50Ppt 26-50
Ppt 26-50
hungchiayang1
 
Ppt 51-77
Ppt 51-77Ppt 51-77
Ppt 51-77
hungchiayang1
 
Ppt 120-126
Ppt 120-126Ppt 120-126
Ppt 120-126
hungchiayang1
 
Ppt 1-25
Ppt 1-25Ppt 1-25
Ppt 1-25
hungchiayang1
 
Ppt 78-100
Ppt 78-100Ppt 78-100
Ppt 78-100
hungchiayang1
 

What's hot (20)

Ch11 教學
Ch11 教學Ch11 教學
Ch11 教學
 
Ch12 範例
Ch12 範例Ch12 範例
Ch12 範例
 
Ch11 範例
Ch11 範例Ch11 範例
Ch11 範例
 
Ch9 教學
Ch9 教學Ch9 教學
Ch9 教學
 
Ppt 1-50
Ppt 1-50Ppt 1-50
Ppt 1-50
 
Ch9 範例
Ch9 範例Ch9 範例
Ch9 範例
 
Ch10 範例
Ch10 範例Ch10 範例
Ch10 範例
 
Ch10 習題
Ch10 習題Ch10 習題
Ch10 習題
 
Ch2 教學
Ch2 教學Ch2 教學
Ch2 教學
 
Appendix B 教學
Appendix B 教學Appendix B 教學
Appendix B 教學
 
Ppt 51-77
Ppt 51-77Ppt 51-77
Ppt 51-77
 
Sym py edu
Sym py eduSym py edu
Sym py edu
 
Ch1 教學
Ch1 教學Ch1 教學
Ch1 教學
 
Appendix B 範例
Appendix B 範例Appendix B 範例
Appendix B 範例
 
Ppt 138-142
Ppt 138-142Ppt 138-142
Ppt 138-142
 
Ppt 26-50
Ppt 26-50Ppt 26-50
Ppt 26-50
 
Ppt 51-77
Ppt 51-77Ppt 51-77
Ppt 51-77
 
Ppt 120-126
Ppt 120-126Ppt 120-126
Ppt 120-126
 
Ppt 1-25
Ppt 1-25Ppt 1-25
Ppt 1-25
 
Ppt 78-100
Ppt 78-100Ppt 78-100
Ppt 78-100
 

Similar to Ch12 教學

ncuma_串列.pptx
ncuma_串列.pptxncuma_串列.pptx
ncuma_串列.pptx
NCU MCL
 
Num py basic(2) - v01
Num py   basic(2) - v01Num py   basic(2) - v01
Num py basic(2) - v01
ssuser5e7722
 
第5章数组
第5章数组第5章数组
第5章数组
summerfeng
 
手把手打開Python資料分析大門
手把手打開Python資料分析大門手把手打開Python資料分析大門
手把手打開Python資料分析大門
Yen-lung Tsai
 
ncuma_字串.pptx
ncuma_字串.pptxncuma_字串.pptx
ncuma_字串.pptx
NCU MCL
 
ncuma_pylab.pptx
ncuma_pylab.pptxncuma_pylab.pptx
ncuma_pylab.pptx
NCU MCL
 
Python入門:5大概念初心者必備
Python入門:5大概念初心者必備Python入門:5大概念初心者必備
Python入門:5大概念初心者必備
Derek Lee
 
Python入門:5大概念初心者必備 2021/11/18
Python入門:5大概念初心者必備 2021/11/18Python入門:5大概念初心者必備 2021/11/18
Python入門:5大概念初心者必備 2021/11/18
Derek Lee
 
Chapter 5 array and struct
Chapter 5 array and structChapter 5 array and struct
Chapter 5 array and struct
hhliu
 
Python learn guide
Python learn guidePython learn guide
Python learn guide
robin yang
 

Similar to Ch12 教學 (20)

Ch12
Ch12Ch12
Ch12
 
Ch11
Ch11Ch11
Ch11
 
Ch8
Ch8Ch8
Ch8
 
Ch4
Ch4Ch4
Ch4
 
Ch5
Ch5Ch5
Ch5
 
ncuma_串列.pptx
ncuma_串列.pptxncuma_串列.pptx
ncuma_串列.pptx
 
Num py basic(2) - v01
Num py   basic(2) - v01Num py   basic(2) - v01
Num py basic(2) - v01
 
Ch5
Ch5Ch5
Ch5
 
第5章数组
第5章数组第5章数组
第5章数组
 
手把手打開Python資料分析大門
手把手打開Python資料分析大門手把手打開Python資料分析大門
手把手打開Python資料分析大門
 
Ch 6
Ch 6Ch 6
Ch 6
 
ncuma_字串.pptx
ncuma_字串.pptxncuma_字串.pptx
ncuma_字串.pptx
 
ncuma_pylab.pptx
ncuma_pylab.pptxncuma_pylab.pptx
ncuma_pylab.pptx
 
Python入門:5大概念初心者必備
Python入門:5大概念初心者必備Python入門:5大概念初心者必備
Python入門:5大概念初心者必備
 
Python入門:5大概念初心者必備 2021/11/18
Python入門:5大概念初心者必備 2021/11/18Python入門:5大概念初心者必備 2021/11/18
Python入門:5大概念初心者必備 2021/11/18
 
Chapter 5 array and struct
Chapter 5 array and structChapter 5 array and struct
Chapter 5 array and struct
 
Ch6
Ch6Ch6
Ch6
 
Python learn guide
Python learn guidePython learn guide
Python learn guide
 
Ch9
Ch9Ch9
Ch9
 
Ch10
Ch10Ch10
Ch10
 

More from hungchiayang1

Exercise 1 3
Exercise 1 3Exercise 1 3
Exercise 1 3
hungchiayang1
 
P127 135 new
P127 135 newP127 135 new
P127 135 new
hungchiayang1
 
Python p.193 197
Python p.193 197Python p.193 197
Python p.193 197
hungchiayang1
 
Python differential equation
Python differential equationPython differential equation
Python differential equation
hungchiayang1
 
化學系 python 習題
化學系 python 習題化學系 python 習題
化學系 python 習題
hungchiayang1
 
化學系 python 練習
化學系 python 練習化學系 python 練習
化學系 python 練習
hungchiayang1
 
化學系 python 教學
化學系 python 教學化學系 python 教學
化學系 python 教學
hungchiayang1
 
Ppt 151-151
Ppt 151-151Ppt 151-151
Ppt 151-151
hungchiayang1
 
Ppt 136-136
Ppt 136-136Ppt 136-136
Ppt 136-136
hungchiayang1
 
Ppt 143-143
Ppt 143-143Ppt 143-143
Ppt 143-143
hungchiayang1
 
Ppt 137-137
Ppt 137-137Ppt 137-137
Ppt 137-137
hungchiayang1
 
Ppt 150-150
Ppt 150-150Ppt 150-150
Ppt 150-150
hungchiayang1
 
Ppt 145-149
Ppt 145-149Ppt 145-149
Ppt 145-149
hungchiayang1
 
Ppt 174-174
Ppt 174-174Ppt 174-174
Ppt 174-174
hungchiayang1
 
Ppt 144-144
Ppt 144-144Ppt 144-144
Ppt 144-144
hungchiayang1
 
Ppt 167-173
Ppt 167-173Ppt 167-173
Ppt 167-173
hungchiayang1
 
Ppt 152-155
Ppt 152-155Ppt 152-155
Ppt 152-155
hungchiayang1
 
Ppt 156-156
Ppt 156-156Ppt 156-156
Ppt 156-156
hungchiayang1
 
Ppt 166-166
Ppt 166-166Ppt 166-166
Ppt 166-166
hungchiayang1
 
Ppt 165-165
Ppt 165-165Ppt 165-165
Ppt 165-165
hungchiayang1
 

More from hungchiayang1 (20)

Exercise 1 3
Exercise 1 3Exercise 1 3
Exercise 1 3
 
P127 135 new
P127 135 newP127 135 new
P127 135 new
 
Python p.193 197
Python p.193 197Python p.193 197
Python p.193 197
 
Python differential equation
Python differential equationPython differential equation
Python differential equation
 
化學系 python 習題
化學系 python 習題化學系 python 習題
化學系 python 習題
 
化學系 python 練習
化學系 python 練習化學系 python 練習
化學系 python 練習
 
化學系 python 教學
化學系 python 教學化學系 python 教學
化學系 python 教學
 
Ppt 151-151
Ppt 151-151Ppt 151-151
Ppt 151-151
 
Ppt 136-136
Ppt 136-136Ppt 136-136
Ppt 136-136
 
Ppt 143-143
Ppt 143-143Ppt 143-143
Ppt 143-143
 
Ppt 137-137
Ppt 137-137Ppt 137-137
Ppt 137-137
 
Ppt 150-150
Ppt 150-150Ppt 150-150
Ppt 150-150
 
Ppt 145-149
Ppt 145-149Ppt 145-149
Ppt 145-149
 
Ppt 174-174
Ppt 174-174Ppt 174-174
Ppt 174-174
 
Ppt 144-144
Ppt 144-144Ppt 144-144
Ppt 144-144
 
Ppt 167-173
Ppt 167-173Ppt 167-173
Ppt 167-173
 
Ppt 152-155
Ppt 152-155Ppt 152-155
Ppt 152-155
 
Ppt 156-156
Ppt 156-156Ppt 156-156
Ppt 156-156
 
Ppt 166-166
Ppt 166-166Ppt 166-166
Ppt 166-166
 
Ppt 165-165
Ppt 165-165Ppt 165-165
Ppt 165-165
 

Recently uploaded

一比一原版(Ryerson毕业证书)瑞尔森大学毕业证成绩单如何办理
一比一原版(Ryerson毕业证书)瑞尔森大学毕业证成绩单如何办理一比一原版(Ryerson毕业证书)瑞尔森大学毕业证成绩单如何办理
一比一原版(Ryerson毕业证书)瑞尔森大学毕业证成绩单如何办理
ictglzse
 
一比一原版(Griffith毕业证书)格里菲斯大学毕业证成绩单
一比一原版(Griffith毕业证书)格里菲斯大学毕业证成绩单一比一原版(Griffith毕业证书)格里菲斯大学毕业证成绩单
一比一原版(Griffith毕业证书)格里菲斯大学毕业证成绩单
h0wovd5
 
大学成绩修改,找黑客改分修改成绩单,挂科修改GPA成绩提高代考GMAT【微oojjiijj信】
大学成绩修改,找黑客改分修改成绩单,挂科修改GPA成绩提高代考GMAT【微oojjiijj信】大学成绩修改,找黑客改分修改成绩单,挂科修改GPA成绩提高代考GMAT【微oojjiijj信】
大学成绩修改,找黑客改分修改成绩单,挂科修改GPA成绩提高代考GMAT【微oojjiijj信】
微信 tytyqqww业务接单
 
出国改成绩, 修改成绩,找黑客修改成绩,找黑客改成绩,黑客修改国外大学成绩修改,[英国院校]挂科?别担心!成绩单上的遗憾,我们帮你弥补。改造成绩认证deg...
出国改成绩, 修改成绩,找黑客修改成绩,找黑客改成绩,黑客修改国外大学成绩修改,[英国院校]挂科?别担心!成绩单上的遗憾,我们帮你弥补。改造成绩认证deg...出国改成绩, 修改成绩,找黑客修改成绩,找黑客改成绩,黑客修改国外大学成绩修改,[英国院校]挂科?别担心!成绩单上的遗憾,我们帮你弥补。改造成绩认证deg...
出国改成绩, 修改成绩,找黑客修改成绩,找黑客改成绩,黑客修改国外大学成绩修改,[英国院校]挂科?别担心!成绩单上的遗憾,我们帮你弥补。改造成绩认证deg...
微信 tytyqqww业务接单
 
大学成绩修改,找黑客改分,修改成绩单,挂科修改,GPA成绩提高黑客常用的邮件入侵方式如何破解Instagram帐户和密码【微oojjiijj信】
大学成绩修改,找黑客改分,修改成绩单,挂科修改,GPA成绩提高黑客常用的邮件入侵方式如何破解Instagram帐户和密码【微oojjiijj信】大学成绩修改,找黑客改分,修改成绩单,挂科修改,GPA成绩提高黑客常用的邮件入侵方式如何破解Instagram帐户和密码【微oojjiijj信】
大学成绩修改,找黑客改分,修改成绩单,挂科修改,GPA成绩提高黑客常用的邮件入侵方式如何破解Instagram帐户和密码【微oojjiijj信】
微信 tytyqqww业务接单
 
一比一原版(Adelaide毕业证)阿德莱德大学毕业证成绩单
一比一原版(Adelaide毕业证)阿德莱德大学毕业证成绩单一比一原版(Adelaide毕业证)阿德莱德大学毕业证成绩单
一比一原版(Adelaide毕业证)阿德莱德大学毕业证成绩单
h0wovd5
 
黑客改gpa ,黑客技术,黑客改分,黑客改成绩,黑客修改成绩揭秘黑客常用的入侵方式,邮件成主要攻击对象!💥 你是否曾经收到过来历不明的邮件?里面可能藏着木...
黑客改gpa ,黑客技术,黑客改分,黑客改成绩,黑客修改成绩揭秘黑客常用的入侵方式,邮件成主要攻击对象!💥 你是否曾经收到过来历不明的邮件?里面可能藏着木...黑客改gpa ,黑客技术,黑客改分,黑客改成绩,黑客修改成绩揭秘黑客常用的入侵方式,邮件成主要攻击对象!💥 你是否曾经收到过来历不明的邮件?里面可能藏着木...
黑客改gpa ,黑客技术,黑客改分,黑客改成绩,黑客修改成绩揭秘黑客常用的入侵方式,邮件成主要攻击对象!💥 你是否曾经收到过来历不明的邮件?里面可能藏着木...
微信 tytyqqww业务接单
 
国外学历认证办理,留信网认证办理.国外大学成绩单修改,留学gpa不足上国外名牌大学,黑客改gpa成绩!【微信tytyqqww】
国外学历认证办理,留信网认证办理.国外大学成绩单修改,留学gpa不足上国外名牌大学,黑客改gpa成绩!【微信tytyqqww】国外学历认证办理,留信网认证办理.国外大学成绩单修改,留学gpa不足上国外名牌大学,黑客改gpa成绩!【微信tytyqqww】
国外学历认证办理,留信网认证办理.国外大学成绩单修改,留学gpa不足上国外名牌大学,黑客改gpa成绩!【微信tytyqqww】
微信 tytyqqww业务接单
 
一比一原版(JCU毕业证书)詹姆斯库克大学毕业证成绩单
一比一原版(JCU毕业证书)詹姆斯库克大学毕业证成绩单一比一原版(JCU毕业证书)詹姆斯库克大学毕业证成绩单
一比一原版(JCU毕业证书)詹姆斯库克大学毕业证成绩单
h0wovd5
 
一比一原版(UQ毕业证书)昆士兰大学毕业证成绩单
一比一原版(UQ毕业证书)昆士兰大学毕业证成绩单一比一原版(UQ毕业证书)昆士兰大学毕业证成绩单
一比一原版(UQ毕业证书)昆士兰大学毕业证成绩单
h0wovd5
 
鏘鏘的帶賽人生:從自卑到強運的50年成長屁事然後聊一聊傻瓜型學習歷程分析.pptx
鏘鏘的帶賽人生:從自卑到強運的50年成長屁事然後聊一聊傻瓜型學習歷程分析.pptx鏘鏘的帶賽人生:從自卑到強運的50年成長屁事然後聊一聊傻瓜型學習歷程分析.pptx
鏘鏘的帶賽人生:從自卑到強運的50年成長屁事然後聊一聊傻瓜型學習歷程分析.pptx
Koong Lin
 
黑客改分,黑客改成绩,黑客修改成绩,黑客改学历,黑客服务黑客修改大学成绩,黑客改成绩单,黑客入侵教务系统,找黑客修改成绩.【微oojjiijj信】
黑客改分,黑客改成绩,黑客修改成绩,黑客改学历,黑客服务黑客修改大学成绩,黑客改成绩单,黑客入侵教务系统,找黑客修改成绩.【微oojjiijj信】黑客改分,黑客改成绩,黑客修改成绩,黑客改学历,黑客服务黑客修改大学成绩,黑客改成绩单,黑客入侵教务系统,找黑客修改成绩.【微oojjiijj信】
黑客改分,黑客改成绩,黑客修改成绩,黑客改学历,黑客服务黑客修改大学成绩,黑客改成绩单,黑客入侵教务系统,找黑客修改成绩.【微oojjiijj信】
微信 tytyqqww业务接单
 
哇塞!黑客大佬居然能入侵网站改成绩,简直是神仙操作啊!太牛了!🤩💪🔥【微oojjiijj信】
哇塞!黑客大佬居然能入侵网站改成绩,简直是神仙操作啊!太牛了!🤩💪🔥【微oojjiijj信】哇塞!黑客大佬居然能入侵网站改成绩,简直是神仙操作啊!太牛了!🤩💪🔥【微oojjiijj信】
哇塞!黑客大佬居然能入侵网站改成绩,简直是神仙操作啊!太牛了!🤩💪🔥【微oojjiijj信】
微信 tytyqqww业务接单
 

Recently uploaded (13)

一比一原版(Ryerson毕业证书)瑞尔森大学毕业证成绩单如何办理
一比一原版(Ryerson毕业证书)瑞尔森大学毕业证成绩单如何办理一比一原版(Ryerson毕业证书)瑞尔森大学毕业证成绩单如何办理
一比一原版(Ryerson毕业证书)瑞尔森大学毕业证成绩单如何办理
 
一比一原版(Griffith毕业证书)格里菲斯大学毕业证成绩单
一比一原版(Griffith毕业证书)格里菲斯大学毕业证成绩单一比一原版(Griffith毕业证书)格里菲斯大学毕业证成绩单
一比一原版(Griffith毕业证书)格里菲斯大学毕业证成绩单
 
大学成绩修改,找黑客改分修改成绩单,挂科修改GPA成绩提高代考GMAT【微oojjiijj信】
大学成绩修改,找黑客改分修改成绩单,挂科修改GPA成绩提高代考GMAT【微oojjiijj信】大学成绩修改,找黑客改分修改成绩单,挂科修改GPA成绩提高代考GMAT【微oojjiijj信】
大学成绩修改,找黑客改分修改成绩单,挂科修改GPA成绩提高代考GMAT【微oojjiijj信】
 
出国改成绩, 修改成绩,找黑客修改成绩,找黑客改成绩,黑客修改国外大学成绩修改,[英国院校]挂科?别担心!成绩单上的遗憾,我们帮你弥补。改造成绩认证deg...
出国改成绩, 修改成绩,找黑客修改成绩,找黑客改成绩,黑客修改国外大学成绩修改,[英国院校]挂科?别担心!成绩单上的遗憾,我们帮你弥补。改造成绩认证deg...出国改成绩, 修改成绩,找黑客修改成绩,找黑客改成绩,黑客修改国外大学成绩修改,[英国院校]挂科?别担心!成绩单上的遗憾,我们帮你弥补。改造成绩认证deg...
出国改成绩, 修改成绩,找黑客修改成绩,找黑客改成绩,黑客修改国外大学成绩修改,[英国院校]挂科?别担心!成绩单上的遗憾,我们帮你弥补。改造成绩认证deg...
 
大学成绩修改,找黑客改分,修改成绩单,挂科修改,GPA成绩提高黑客常用的邮件入侵方式如何破解Instagram帐户和密码【微oojjiijj信】
大学成绩修改,找黑客改分,修改成绩单,挂科修改,GPA成绩提高黑客常用的邮件入侵方式如何破解Instagram帐户和密码【微oojjiijj信】大学成绩修改,找黑客改分,修改成绩单,挂科修改,GPA成绩提高黑客常用的邮件入侵方式如何破解Instagram帐户和密码【微oojjiijj信】
大学成绩修改,找黑客改分,修改成绩单,挂科修改,GPA成绩提高黑客常用的邮件入侵方式如何破解Instagram帐户和密码【微oojjiijj信】
 
一比一原版(Adelaide毕业证)阿德莱德大学毕业证成绩单
一比一原版(Adelaide毕业证)阿德莱德大学毕业证成绩单一比一原版(Adelaide毕业证)阿德莱德大学毕业证成绩单
一比一原版(Adelaide毕业证)阿德莱德大学毕业证成绩单
 
黑客改gpa ,黑客技术,黑客改分,黑客改成绩,黑客修改成绩揭秘黑客常用的入侵方式,邮件成主要攻击对象!💥 你是否曾经收到过来历不明的邮件?里面可能藏着木...
黑客改gpa ,黑客技术,黑客改分,黑客改成绩,黑客修改成绩揭秘黑客常用的入侵方式,邮件成主要攻击对象!💥 你是否曾经收到过来历不明的邮件?里面可能藏着木...黑客改gpa ,黑客技术,黑客改分,黑客改成绩,黑客修改成绩揭秘黑客常用的入侵方式,邮件成主要攻击对象!💥 你是否曾经收到过来历不明的邮件?里面可能藏着木...
黑客改gpa ,黑客技术,黑客改分,黑客改成绩,黑客修改成绩揭秘黑客常用的入侵方式,邮件成主要攻击对象!💥 你是否曾经收到过来历不明的邮件?里面可能藏着木...
 
国外学历认证办理,留信网认证办理.国外大学成绩单修改,留学gpa不足上国外名牌大学,黑客改gpa成绩!【微信tytyqqww】
国外学历认证办理,留信网认证办理.国外大学成绩单修改,留学gpa不足上国外名牌大学,黑客改gpa成绩!【微信tytyqqww】国外学历认证办理,留信网认证办理.国外大学成绩单修改,留学gpa不足上国外名牌大学,黑客改gpa成绩!【微信tytyqqww】
国外学历认证办理,留信网认证办理.国外大学成绩单修改,留学gpa不足上国外名牌大学,黑客改gpa成绩!【微信tytyqqww】
 
一比一原版(JCU毕业证书)詹姆斯库克大学毕业证成绩单
一比一原版(JCU毕业证书)詹姆斯库克大学毕业证成绩单一比一原版(JCU毕业证书)詹姆斯库克大学毕业证成绩单
一比一原版(JCU毕业证书)詹姆斯库克大学毕业证成绩单
 
一比一原版(UQ毕业证书)昆士兰大学毕业证成绩单
一比一原版(UQ毕业证书)昆士兰大学毕业证成绩单一比一原版(UQ毕业证书)昆士兰大学毕业证成绩单
一比一原版(UQ毕业证书)昆士兰大学毕业证成绩单
 
鏘鏘的帶賽人生:從自卑到強運的50年成長屁事然後聊一聊傻瓜型學習歷程分析.pptx
鏘鏘的帶賽人生:從自卑到強運的50年成長屁事然後聊一聊傻瓜型學習歷程分析.pptx鏘鏘的帶賽人生:從自卑到強運的50年成長屁事然後聊一聊傻瓜型學習歷程分析.pptx
鏘鏘的帶賽人生:從自卑到強運的50年成長屁事然後聊一聊傻瓜型學習歷程分析.pptx
 
黑客改分,黑客改成绩,黑客修改成绩,黑客改学历,黑客服务黑客修改大学成绩,黑客改成绩单,黑客入侵教务系统,找黑客修改成绩.【微oojjiijj信】
黑客改分,黑客改成绩,黑客修改成绩,黑客改学历,黑客服务黑客修改大学成绩,黑客改成绩单,黑客入侵教务系统,找黑客修改成绩.【微oojjiijj信】黑客改分,黑客改成绩,黑客修改成绩,黑客改学历,黑客服务黑客修改大学成绩,黑客改成绩单,黑客入侵教务系统,找黑客修改成绩.【微oojjiijj信】
黑客改分,黑客改成绩,黑客修改成绩,黑客改学历,黑客服务黑客修改大学成绩,黑客改成绩单,黑客入侵教务系统,找黑客修改成绩.【微oojjiijj信】
 
哇塞!黑客大佬居然能入侵网站改成绩,简直是神仙操作啊!太牛了!🤩💪🔥【微oojjiijj信】
哇塞!黑客大佬居然能入侵网站改成绩,简直是神仙操作啊!太牛了!🤩💪🔥【微oojjiijj信】哇塞!黑客大佬居然能入侵网站改成绩,简直是神仙操作啊!太牛了!🤩💪🔥【微oojjiijj信】
哇塞!黑客大佬居然能入侵网站改成绩,简直是神仙操作啊!太牛了!🤩💪🔥【微oojjiijj信】
 

Ch12 教學

  • 1. python 程式設計 python 簡要講義 國立中央大學數學系 吳維漢 第 十二 講 NumPy 科學運算套件 (二)
  • 2. 12 NumPy 套件(二) 結構陣列 (一)  陣列元素有個別型別與名稱,如同 C 的 struct 一樣。若不設名稱, 則預設為 f0,f1, . . . 。  結構陣列元素的名稱與型別可使用 dtype 取得  取得結構陣列元素個別名稱所有資料 2 >>> a = np.zeros(3,"float, int") >>> a array([(0.0, 0), (0.0, 0), (0.0, 0)], dtype=[(’f0’, ’<f8’), (’f1’, ’<i8’)]) >>> a.dtype dtype([(’f0’, ’<f8’), (’f1’, ’<i8’)]) >>> a[’f1’] array([0, 0, 0]) 以上的 ’<f8’ 代表為浮點數佔用 8 位元組,使用 little-endian 方式儲存。 若是 ’>f8’ 則是使用 big-endian。
  • 3. 12 NumPy 套件(二) 結構陣列 (二)  可先設定各個元素的 dtype ,再定義陣列  物件名稱字典可直接取用或設定資料 3 >>> dt = np.dtype( [( ’x’ , ’i’) , ( ’y’ , ’f8’ )]) >>> a = np.ones(3,dt) >>> a array([(1, 1.0), (1, 1.0), (1, 1.0)], dtype=[(’x’, ’<i4’), (’y’, ’<f8’)]) >>> a[’x’] array([1, 1, 1], dtype=int32) >>> dt = np.dtype( [( ’x’ , ’f8’) , ( ’y’ , ’f8’ )]) >>> a = np.empty(11,dt) >>> a[’x’] = np.linspace(0,2.5,len(a)) >>> a[’y’] = a[’x’]**2 >>> a array([(0.0, 0.0), (0.25, 0.0625), (0.5, 0.25), (0.75, 0.5625), (1.0, 1.0),(1.25, 1.5625), (1.5, 2.25), (1.75, 3.0625), (2.0, 4.0),(2.25, 5.0625), (2.5, 6.25)], dtype=[(’x’, ’<f8’), (’y’, ’<f8’)])
  • 4. 12 NumPy 套件(二) 讀寫檔案 (一)  np.loadtxt(fname,...):由 fname 檔案讀入資料 4
  • 5. 12 NumPy 套件(二) 讀寫檔案 (二) 假設為累積雨量檔案,每列的第一個欄位為時間,之後十個欄位為 不同測站所量測到以兩小時為單位的累積兩量(mm)。 5 # AM 2017-03-31:02 0 0 0 0 0 0 0 0 0 0 2017-03-31:04 0 0 0 0 0 0 0 0 0 0 2017-03-31:06 0 0 0 0 0 0 0 0 0 0 2017-03-31:08 0 0 0 0 0 0 0 0 0 0 2017-03-31:10 0 0 0 0 0 0 0 0 0 0 2017-03-31:12 0 0 0 0 0 0 0 0 0 0 # PM 2017-03-31:14 1 6 3 0 0 1 0 0 0 0 2017-03-31:16 3 2 0 0 0 0 0 0 0 0 2017-03-31:18 0 0 0 0 0 0 0 0 0 2 2017-03-31:20 15 10 8 6 5 8 6 4 3 4 2017-03-31:22 4 3 5 7 7 6 10 6 2 5 2017-03-31:24 8 6 5 6 5 6 8 7 4 4
  • 6. 12 NumPy 套件(二) 讀寫檔案 (三)  讀入檔案資料成二維陣列:各直列存入字典,預設索引為 f0, f1, f2, ... 6 >>> dts = "S13" + ",f8" * 10 >>> a = np.loadtxt("rainfall2.dat",dts) >>> a a array([(b’2017-03-31:02’, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0), (b’2017-03-31:04’, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0), (b’2017-03-31:06’, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0), (b’2017-03-31:08’, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0), (b’2017-03-31:10’, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0), (b’2017-03-31:12’, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0), (b’2017-03-31:14’, 1.0, 6.0, 3.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0), (b’2017-03-31:16’, 3.0, 2.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0), (b’2017-03-31:18’, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2.0), (b’2017-03-31:20’, 15.0, 10.0, 8.0, 6.0, 5.0, 8.0, 6.0, 4.0, 3.0, 4.0), (b’2017-03-31:22’, 4.0, 3.0, 5.0, 7.0, 7.0, 6.0, 10.0, 6.0, 2.0, 5.0), (b’2017-03-31:24’, 8.0, 6.0, 5.0, 6.0, 5.0, 6.0, 8.0, 7.0, 4.0, 4.0)], dtype=[(’f0’, ’S13’), (’f1’, ’<f8’), (’f2’, ’<f8’), (’f3’, ’<f8’), (’f4’, ’<f8’), (’f5’, ’<f8’), (’f6’, ’<f8’), (’f7’, ’<f8’), (’f8’, ’<f8’), (’f9’, ’<f8’), (’f10’, ’<f8’)])
  • 7. 12 NumPy 套件(二) 讀寫檔案 (四) 7 >>> a[’f0’] array([b’2017-03-31:02’, b’2017-03-31:04’, b’2017-03-31:06’, b’2017-03-31:08’, b’2017-03-31:10’, b’2017-03-31:12’, b’2017-03-31:14’, b’2017-03-31:16’, b’2017-03-31:18’, b’2017-03-31:20’, b’2017-03-31:22’, b’2017-03-31:24’], dtype=’|S13’) >>> a[’f1’] array([ 0., 0., 0., 0., 0., 0., 1., 3., 0., 15., 4., 8.]) >>> sum(a[’f1’]) 31.0 >>> raining = a[’f1’] > 0 >>> raining array([False, False, False, False, False, False, True, True, False, True, True, True], dtype=bool) >>> a[’f1’][raining] # 取出有第一個測站有下雨的雨量 array([ 1., 3., 15., 4., 8.]) >>> a[’f0’][raining] # 取出有第一個測站有下雨的時段 array([b’2017-03-31:14’, b’2017-03-31:16’, b’2017-03-31:20’, b’2017-03-31:22’, b’2017-03-31:24’], dtype=’|S13’)
  • 8. 12 NumPy 套件(二) 讀寫檔案 (五)  僅取出前兩個測站的時雨量: 8 >>> a , b = np.loadtxt("rainfall2.dat",usecols=(1,2),unpack=True) >>> a array([ 0., 0., 0., 0., 0., 0., 1., 3., 0., 15., 4., 8.]) >>> b array([ 0., 0., 0., 0., 0., 0., 6., 2., 0., 10., 3., 6.])
  • 9. 12 NumPy 套件(二) 讀寫檔案 (六)  若要加取出日期時間字串,須個別設定取出欄位的資料型別: 9 >>> dts = "S13,f8" >>> dhr , b = np.loadtxt("rainfall2.dat",usecols=(0,2), dtype=dts,unpack=True) >>> dhr array([b’2017-03-31:02’, b’2017-03-31:04’, b’2017-03-31:06’, b’2017-03-31:08’, b’2017-03-31:10’, b’2017-03-31:12’, b’2017-03-31:14’, b’2017-03-31:16’, b’2017-03-31:18’, b’2017-03-31:20’, b’2017-03-31:22’, b’2017-03-31:24’], dtype=’|S13’) >>> b array([ 0., 0., 0., 0., 0., 0., 6., 2., 0., 10., 3., 6.]) 以上 dhr 所取得陣列元素為 bytes 型別,字元資料不可變更。
  • 10. 12 NumPy 套件(二) 讀寫檔案 (七)  設定欄位索引取出資料 10 >>> dts = np.dtype([(’dtime’,’S13’),(’rstation1’,’f8’)]) >>> a = np.loadtxt("rainfall2.dat",usecols=(0,1),dtype=dts) >>> a[’dtime’] array([b’2017-03-31:02’, b’2017-03-31:04’, b’2017-03-31:06’, b’2017-03-31:08’, b’2017-03-31:10’, b’2017-03-31:12’, b’2017-03-31:14’, b’2017-03-31:16’, b’2017-03-31:18’, b’2017-03-31:20’, b’2017-03-31:22’, b’2017-03-31:24’], dtype=’|S13’) >>> a[’rstation1’] array([ 0., 0., 0., 0., 0., 0., 1., 3., 0., 15., 4., 8.])
  • 11. 12 NumPy 套件(二) 排序 (一)  foo.sort():對最後分量(最裡層中括號)排序  一維陣列  多維陣列 11 >>> a = np.array([1,3,5]) >>> a.sort() >>> a array([1, 3, 5]) >>> a = np.array( [[3,2,7], [4,1,3]] ) >>> a.sort() >>> a array([[2, 3, 7], [1, 3, 4]]) >>> b = np.array( [[[3,2,4],[9,3,1]],[[5,2,6],[1,4,2]] ] ) >>> b.sort() >>> b array([[[2, 3, 4], [1, 3, 9]], [[2, 5, 6], [1, 2, 4]]])
  • 12. 12 NumPy 套件(二) 排序 (二)  foo.sort(axis=n): 在其他分量下標位置相同下,對第 n 個分量排序 12 >>> a = np.array( [[3,2,7], [4,1,3]] ) >>> a.sort(axis=0) # 垂直方向排序 >>> a array([[3, 1, 3], [4, 2, 7]])  三維或以上維度的陣列,對非最後分量的排序變得不直覺。
  • 13. 12 NumPy 套件(二) 排序 (三) 13 >>> b = np.array( [[[3,1,4],[2,5,9]],[[9,0,8],[7,3,6]]]) >>> b array([[[3, 1, 4], [2, 5, 9]], [[9, 0, 8], [7, 3, 6]]]) >>> b.sort(axis=0) >>> b array([[[3, 0, 4], [2, 3, 6]], [[9, 1, 8], [7, 5, 9]]]) 以上的 b 元素下標依次序分別為: 3 1 4 b[0,0,0] b[0,0,1] b[0,0,2] 2 5 9 ---> b[0,1,0] b[0,1,1] b[0,1,2] 9 0 8 b[1,0,0] b[1,0,1] b[1,0,2] 7 3 6 b[1,1,0] b[1,1,1] b[1,1,2] 對第一個分量排序,即是在其餘分量下標位置不變下,調整順序。因此,3 與 9 比大小, 1 與 0 比大 小,4 與 8 比大小, 2 與 7 比大小,5 與 3 比大小,9 與 6 比大小。同樣分析方式也適用在對第二 個分量數字排序。
  • 14. 12 NumPy 套件(二) 排序 (四)  np.sort(foo,axis=n): 根據第 n 個分量排序,回傳排序後的陣列,原始 foo 陣列不變。 若不設定 axis 則對最後分量排序。  np.argsort(foo):回傳排序後的下標位置陣列,foo 陣列不變 14 >>> a = np.array( [[3,1,4],[8,5,7]] ) >>> np.sort(a) # 送出排序後的結果 array([[1, 3, 4], [5, 7, 8]]) >>> a # 原陣列不變 array([[3, 1, 4], [8, 5, 7]]) >>> a = np.array([8,5,9,0]) >>> np.argsort(a) array([3, 1, 0, 2]) >>> a[np.argsort(a)] # 透過排序後的下標位置得到排序後陣列 array([0, 5, 8, 9]) >>> a # 原陣列不變 array([8, 5, 9, 0])
  • 15. 12 NumPy 套件(二) 排序 (五)  np.searchsorted(foo,a): 在已排序 foo 陣列內找尋大於等於 a 且最接近 a 的 下標位置  np.searchsorted(foo,b):同上,但 b 為串列 15 >>> a = np.array([1,2,4,6]) >>> np.searchsorted(3) # a[2] >= 3 2 >>> np.searchsorted(a,[3,7,4,0]) array([2, 4, 2, 0])  若輸入的數比 foo 陣列內所有的數都大,則回傳 len(foo)
  • 16. 12 NumPy 套件(二) 邏輯運算與比較 (一)  np.all(foo):檢查 foo 陣列的每個元素是否都為 True  np.any(foo):檢查 foo 陣列中有個元素為 True  np.isreal(foo):檢查 foo 陣列的元素是否為實數  np.iscomplex(foo):檢查 foo 陣列的元素是否為複數 16 >>> np.all( np.array([2,0,1]) ) False >>> np.any( np.array([0,0,3]) ) True >>> np.isreal( np.array( [1,2+j,3] ) ) False >>> np.iscomplex( np.array( [1,2+1j,3] ) ) True  複數的虛數部份如果為 1,仍需寫上 1,不得省略。
  • 18. 12 NumPy 套件(二) 邏輯運算與比較 (三) 18 >>> a = np.array( [1.e10, 2e-8] ) >>> b = np.array( [1.0001e10, 1e-8] ) >>> np.isclose( a , b ) array([False, True], dtype=bool) >>> np.allclose( a , b ) False >>> c = np.array( [1.000001e10, 1e-8] ) >>> np.allclose(a,c) True >>> np.isclose(a,c,rtol=1e-8) # 重新設定 rtol 數值 array([False, True], dtype=bool) >>> a = np.array( [np.nan,10] ) >>> b = np.array( [np.nan,15] ) >>> np.isclose(a,b) array([False, False], dtype=bool) >>> np.isclose(a,b,equal_nan=True) array([ True, False], dtype=bool)  如果兩數字為 np.nan,則預設數值上不相等,但可設定 equal_nan=True 使其相等