今天是鐵人賽的第九天,前天介紹了如何建立Numpy的陣列,和陣列的一些基本屬性(size、shape...),和兩個以上的陣列可以如何合併和分割。昨天介紹了陣列的一些運算(sum、min、max..),陣列的broadcasting特性,還有使用運算子和遮罩的特性取得想要的元素。今天持續要來介紹Numpy
費氏的觀念就是傳遞一個陣列當作index去取得元素。以下面的程式當作例子:
import numpy as np
x = np.random.randint(0,100,size = 10)
print('x----------->',x)
# 輸出結果
x-----------> [66 74 84 13 37 83 58 90 84 23]
[x[0],x[3],x[2],x[6]]
# 輸出結果
[66, 13, 84, 58]
ironman = np.array([
[0,3],
[2,6]
])
x[ironman]
# 輸出結果
array([[66, 13],
[84, 58]])
y = np.random.randint(0,100,(3,4))
print('y-------->',y)
row = np.array([0,1,2])
col = np.array([2,1,3])
print('y[row,col]----->',y[row,col])
# 輸出結果
y--------> [[65 76 49 29]
[24 96 13 20]
[91 58 37 24]]
y[row,col]-----> [49 96 24]
# 49-> 第0 row,第2 col
# 96-> 第1 row,第1 col
# 24-> 第2 row,第3 col
newRow = row[:, np.newaxis]
print('newRow----->',newRow)
print('y[newRow,col]----->',y[newRow,col])
# 輸出結果
newRow-----> [[0]
[1]
[2]]
y[newRow,col]-----> [[49 76 29]
[13 96 20]
[37 58 24]]
#[49,13,37] 第0~2 row ,第2 col
#[76,96,58] 第0~2 row ,第1 col
#[29,20,24] 第0~2 row ,第3 col
x = np.random.randint(0,100,size = 10)
print('x--------------->',x)
i = np.array([2,1,5,7])
print('i--------------->',i)
x[i] = 33
print('x--------------->',x)
# 輸出結果
x---------------> [91 38 11 54 82 67 63 4 7 34]
i---------------> [2 1 5 7]
x---------------> [91 33 33 54 82 33 63 33 7 34]
#可以看到index 1,2,5,7 已經被改成33
將陣列從小到大做排序
x = np.random.randint(0,100,size = 10) #隨機產生陣列,沒有排序
print('x--------------->',x)
x.sort()
print('x--------------->',x)
# 輸出結果
x---------------> [15 85 51 98 65 43 78 61 85 17]
x---------------> [15 17 43 51 61 65 78 85 85 98]
x = np.random.randint(0,100,size = 5)
print('x--------------->',x)
print('np.argsort(x)--------------->',np.argsort(x))
# 輸出結果
x---------------> [40 22 91 18 74]
np.argsort(x)---------------> [3 1 0 4 2]
# x排序過後會變成 [18 22 40 74 91]
# 18在x的index為 3
# 22在x的index為 1
# 40在x的index為 0
# 74在x的index為 4
# 91在x的index為 2 -> [3 1 0 4 2]
x = np.random.randint(0,100,(4,4))
print('x--------------->',x)
np.sort(x,axis=0)
# 輸出結果
x---------------> [[72 22 23 27]
[50 39 78 3]
[91 27 12 47]
[75 75 78 94]]
array([[50, 22, 12, 3],
[72, 27, 23, 27],
[75, 39, 78, 47],
[91, 75, 78, 94]])
# [72 50 91 75] 排序後 [50 72 75 91]
# [22 39 27 75] 排序後 [22 27 39 75]
# [23 78 12 78] 排序後 [12 23 78 78]
# [27 3 47 84] 排序後 [3 27 47 94]
x = np.random.randint(0,50,size=10)
print('x--------------->',x)
np.partition(x,4)
# 輸出結果
x---------------> [48 29 38 24 9 46 6 29 3 21]
array([ 6, 9, 3, 21, 24, 29, 29, 46, 38, 48])
numpy的資料型態有以下幾種:
字元 | 說明 |
---|---|
b | 位元組 |
i | 有號整數 |
u | 無號整數 |
f | 浮點數 |
c | 複數浮點數 |
S,a | 字串 |
U | unicode字串 |
v | void |
team =np.zeros(4, dtype={'names':('name','number','team'),'formats':('U10','i2','U10')})
# 建立標題name 資料型別是unicode字串 長度10
# 建立標題number 資料型別是有號整數 長度2
# 建立標題team 資料型別是unicode字串 長度10
print('team.dtype------------>',team.dtype)
team['name'] =['彭政閔','林智勝','蘇偉達','陽耀勳']
team['number'] = [23,32,96,23]
team['team'] = ['兄弟象','兄弟象','兄弟象','lamigo']
print('team------------>',team)
# 輸出結果
team.dtype------------> [('name', '<U10'), ('number', '<i2'), ('team', '<U10')]
team------------> [('彭政閔', 23, '兄弟象') ('林智勝', 32, '兄弟象') ('蘇偉達', 96, '兄弟象')
('陽耀勳', 23, 'lamigo')]
print(team['number'])
# 輸出結果
[23 32 96 23]