python創建二維 list 的方法是在 list 里存放 list :
l = [[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]]
numpy可以直接創建一個二維的數組:
import numpy as np l = np.array([ [1,2,3,4], [5,6,7,8], [9,10,11,12], [13,14,15,16] ])
numpy二維數組獲取某個值:
[a, b] : a 表示行索引, b 表示列索引,就是獲取第 a 行第 b個元素
print l[1, 3] # 8
也可以截取某一部分,組成一個新的numpy數組:
print(l[1:3, 2:4]) # 取第1-3行,第2-4列的數據 # 結果: [[ 7 8] [11 12]]
也可以獲取某一行或者某一列,得到一個新的一維的numpy數組:
print(l[1, :]) # 結果: [5 6 7 8]
print(l[:, 3]) # 結果: [4 8 12 16]
二維numpy數組同樣有 mean() , std() 等內置方法,計算的是整個數組的所有值,無論在哪行哪列:
print(l.mean())
# 結果:
8.5
二維數組的向量化運算也是一樣的:
a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) b = np.array([[1, 1, 1], [2, 2, 2], [3, 3, 3]]) print (a + b) # 結果: [[ 2 3 4] [ 6 7 8] [10 11 12]]
一個綜合栗子:
# 假設有如下5個地鐵站10天的客流數據 ridership = np.array([ [ 0, 0, 2, 5, 0], [1478, 3877, 3674, 2328, 2539], [1613, 4088, 3991, 6461, 2691], [1560, 3392, 3826, 4787, 2613], [1608, 4802, 3932, 4477, 2705], [1576, 3933, 3909, 4979, 2685], [ 95, 229, 255, 496, 201], [ 2, 0, 1, 27, 0], [1438, 3785, 3589, 4174, 2215], [1342, 4043, 4009, 4665, 3033] ])
找出第一天里客流量最多的車站,然后返回這個車站的日平均客流,以及返回所有車站的平均日客流,作為對比:
def mean_riders_for_max_station(ridership): max_index = ridership[0, :].argmax() # 獲取第一天(第0行)的最大值的索引 mean_for_max = ridership[:, max_index].mean() # 通過獲取的索引,獲取對應列,取平均值 overall_mean = ridership.mean() return (overall_mean, mean_for_max) print(mean_riders_for_max_station(ridership)) # 結果: (2342.6, 3239.9)
補充:
栗子中的 max_index = ridership[0, :].argmax() 也可以寫成 max_index = np.argmax(ridership,axis=1)[0]
一個是數組的方法,一個是numpy的方法,其中的 axis 表示軸,后面會細講.