python numpy數組操作2


數組的四則運算

   在numpy模塊中,實現四則運算的計算既可以使用運算符號,也可以使用函數,具體如下例所示:

#加法運算

import numpy as np
math = np.array([98,83,86,92,67,82])
english = np.array([68,74,66,82,75,89])
chinese = np.array([92,83,76,85,87,77])
tot_symbol = math+english+chinese
tot_fun = np.add(np.add(math,english),chinese) #add 加法
print('符號加法:\n',tot_symbol)
print('函數加法:\n',tot_fun)

#除法
height = np.array([165,177,158,169,173])
weight = np.array([62,73,59,72,80])
BMI_symbol = weight/(height/100)**2
BMI_fun = np.divide(weight,np.divide(height,100)**2) #divide 除法
print('符號除法:\n',BMI_symbol)
print('函數除法:\n',BMI_fun)

out:

符號加法:
 [258 240 228 259 229 248]
函數加法:
 [258 240 228 259 229 248]
符號除法:
 [22.77318641 23.30109483 23.63403301 25.20920136 26.7299275 ]
函數除法:
 [22.77318641 23.30109483 23.63403301 25.20920136 26.7299275 ]

四則運算中的符號分別是“+-*/”,對應的numpy模塊函數分別是np.add np.subtract,np.multiply,np.divide.需要注意的是,函數只能接受兩個對象的運算,如果需要多個對象的運算,就得使用嵌套方法。如上所示的符號假發和符號的除法。不管是符號方法還是函數方法,都必須保證操作的數組具有相同的形狀,除了數組與標量之間的運算(如除法中的身高與100的商)。另外,還有三個數學運算符,分別是余數,整數和指數:

import numpy as np
arr7 = np.array([[1,2,10],[10,8,3],[7,6,5]])
arr8 = np.array([[2,2,2],[3,3,4],[4,4,4]])
print('數組arr7:\n',arr7)
print('數組arr8:\n',arr8)
print('求余計算:\n',arr7 % arr8)
print('整除:\n',arr7 // arr8)    #這里面要注意的就是  整除的時候 是  “//”而不是 "/"
print('計算指數:\n',arr7 ** arr8)

out:

數組arr7:
 [[ 1  2 10]
 [10  8  3]
 [ 7  6  5]]
數組arr8:
 [[2 2 2]
 [3 3 4]
 [4 4 4]]
求余計算:
 [[1 0 0]
 [1 2 3]
 [3 2 1]]
整除:
 [[0 1 5]
 [3 2 0]
 [1 1 1]]
計算指數:
 [[   1    4  100]
 [1000  512   81]
 [2401 1296  625]]

 另外還可以使用np.fmod,np.modf和np.power,但是整除的函數應用會稍微復雜一點,需要寫成np.modf(arr7/arr8)[1],因為modf可以返回

數值的小數部分和整數部分,而整數部分就是要取的整除值。

 

比較運算

處理數組的元素之間可以實現上面提到的數學運算,還可以做元素的比較運算。關於比較運算符如下:

符號 函數 含義
> np.greater(arr1,arr2) 判斷arr1的元素是否大於arr2的元素
>= np.greater_equal(arr1,arr2) 判斷arr1的元素是否大於等於arr2的元素
< np.less(arr1,arr2) 判斷arr1的元素是否小於arr2的元素
<= np.less_equal(arr1,arr2) 判斷arr1的元素是否小於等於arr2的元素
== np.equal(arr1,arr2) 判斷arr1的元素是否等於arr2的元素
!= np.not_equal(arr1,arr2) 判斷arr1的元素是否小等於arr2的元素
     

 

 

 

 

 

 

 

運用比較運算符可以返回bool類型的值,即True和False。有兩種情況會普遍使用到比較運算符,一個是從數組中查詢滿足條件的元素,另一個是根據判斷的結果執行不同的操作。例如:

import numpy as np
arr7 = np.array([[1,2,10],[10,8,3],[7,6,5]])
arr8 = np.array([[2,2,2],[3,3,2],[4,4,4]])
print(arr7)
print('從arr7中取出所有大於arr8的元素',arr7[arr7>arr8])    #取出的是所有arr7中對應的元素大於arr8中對應位置的元素
arr9 = np.array([3,10,23,7,15,9,17,22,4,8,16])
print('取出arr9中所有大於10的元素',arr9[arr9>10])   #得到的是一個一維數組  相當於每個數組中的元素都會跟10來進行比較

print(np.greater(arr7,arr8)) #輸出的是原數組結構的布爾型元素的數組

out:

[[ 1  2 10]
 [10  8  3]
 [ 7  6  5]]
從arr7中取出所有大於arr8的元素 [10 10  8  3  7  6  5]
取出arr9中所有大於10的元素 [23 15 17 22 16]
[[False False  True]
 [ True  True  True]
 [ True  True  True]]

 

廣播運算

上面介紹的是相同形狀的數組,當數組形狀不同時,也能夠進行數學運算的功能成為數組的廣播。數組的廣播是有規則的,如果不滿足這些規則就會出錯;規則如下:

a.各輸入數組的維度可以不相等,但必須確保從右到左維度值相等。

b.如果對應維度值不相等,就必須保證其中一個為1.

c.各輸入數組都向其shape最長的數組看齊,shape中不足的部分都通過在前面加1補齊

下面通過實例來加強理解

import numpy as np
arr10 = np.arange(12).reshape(3,4)                             #arange(12)表示生成從0-11總共12個數組元素組成的數組,然后通過reshape編                                                                                          #成3行4列的二維數組
arr11 = np.arange(101,113).reshape(3,4)                    #同上面arange(101,113)就是生成從 101到112的元素的數組
print('3x4的二維矩陣運算:\n',arr10 + arr11)
arr12 = np.arange(60).reshape(5,4,3)                          #這是個三維數組,我們可以理解為一個長5寬為4高為3的魔方
arr10 = np.arange(12).reshape(4,3)                             #4行3列的二維數組
print('維數不一致,但末尾的維度值一致:\n',arr12 + arr10)               #我們可以這么看,reshape(5,4,3)其實里面相當於包含了 5個                                                                                                                           #reshape(4,3)的二維數組,末尾兩個維度相同,可以進行運算
arr12 = np.arange(60).reshape(5,4,3)
arr13 = np.arange(4).reshape(4,1)                                #這個里面末尾的維度雖然一個是‘’4,3‘’,一個是“4,1”因為后面的數組末尾維度                                                                                           #中其中一個是‘’1‘’,所以是可以進行運算的
print('維數不一致,維數值也不一致,但維度值至少一個為1:\n',arr12+arr13)              #就是在5個(4行3列)的數組中,每行的各個元素對                                                                                                                                          #應加0,1,2,3
arr14 = np.array([5,15,25])
print('arr14的維度自動補齊為(1,3): \n',arr10 + arr14)                                   #每行對應位置元素分別加上 5,15,25

out:

3x4的二維矩陣運算:
 [[101 103 105 107]
 [109 111 113 115]
 [117 119 121 123]]
維數不一致,但末尾的維度值一致:
 [[[ 0  2  4]
  [ 6  8 10]
  [12 14 16]
  [18 20 22]]

 [[12 14 16]
  [18 20 22]
  [24 26 28]
  [30 32 34]]

 [[24 26 28]
  [30 32 34]
  [36 38 40]
  [42 44 46]]

 [[36 38 40]
  [42 44 46]
  [48 50 52]
  [54 56 58]]

 [[48 50 52]
  [54 56 58]
  [60 62 64]
  [66 68 70]]]
維數不一致,維數值也不一致,但維度值至少一個為1:
 [[[ 0  1  2]
  [ 4  5  6]
  [ 8  9 10]
  [12 13 14]]

 [[12 13 14]
  [16 17 18]
  [20 21 22]
  [24 25 26]]

 [[24 25 26]
  [28 29 30]
  [32 33 34]
  [36 37 38]]

 [[36 37 38]
  [40 41 42]
  [44 45 46]
  [48 49 50]]

 [[48 49 50]
  [52 53 54]
  [56 57 58]
  [60 61 62]]]
arr14的維度自動補齊為(1,3): 
 [[ 5 16 27]
 [ 8 19 30]
 [11 22 33]
 [14 25 36]]


以上的操作,根據備注去理解,平時多維數組方面的應用比較少,能理解這些規則是怎么來的就可以了,需要用到的時候再深究。


免責聲明!

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



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