numpy數組(4)-二維數組


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 表示軸,后面會細講.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM