天天看點

python數組的基本運算符

四則運算

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)
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)
print('符号除法:\n',BMI_symbol)
print('函數除法:\n',BMI_fun)
           

四則運算中的符号分别是“+、-、*、/”,對應的numpy子產品函數分别是np.add、np.subtract、np.multiply和np.divide。需要注意的是函數隻能接受兩個對象的運算,如果需要多個對象的運算就需要使用嵌套方法,如上所示。都必須保證操作的數組具有相同的形狀,除了數組與标量之間的運算。

arr7 = np.array([[1,2,10],[10,8,3],[7,6,5]])
arr8 = np.array([[2,2,2],[3,3,3],[4,4,4]])
print('數組arr7:\n',arr7)
print('數組arr8:\n',arr8)
# 求餘數
print('計算餘數:\n',arr7 % arr8)
# 求整除
print('計算整除:\n',arr7 // arr8)
# 求指數
print('計算指數:\n',arr7 ** arr8)
           

以上運算分别是餘數、除數和整數,可以分别用函數np.fmod、np.modf、np.power,但是整數的函數應用會稍微複雜一點,需要寫成np.modf(arr7/arr8)[1],其中modf可以傳回數值的小數部分和整數部分,而整數部分就是要取的整數值。

比較運算

np.greater(arr1,arr2) #>
np.greater_equal(arr1,arr2) #>=
np.less(arr1,arr2) #<
np.less_equal(arr1,arr2) #<=
np.equal(arr1,arr2) #== 等于
np.not_equal(arr1,arr2) #!= 不等于
           

例子如下:

# 取子集
# 從arr7中取出arr7大于arr8的所有元素
print(arr7)
print('滿足條件的二維數組元素擷取:\n',arr7[arr7>arr8])
# 從arr9中取出大于10的元素
arr9 = np.array([3,10,23,7,16,9,17,22,4,8,15])
print('滿足條件的一維數組元素擷取:\n',arr9[arr9>10])

# 判斷操作
# 将arr7中大于7的元素改成5,其餘的不變
print('二維數組的條件操作:\n',np.where(arr7>7,5,arr7))
# 将arr9中大于10 的元素改為1,否則改為0
print('一維數組的條件操作:\n',np.where(arr9>10,1,0))
           

比較運算符可以傳回bool類型的值,即true和false。運用bool索引,将滿足條件的元素從數組中挑選出來,但不管是一維數組還是多元數組,通過bool索引傳回的都是一維數組;np.where函數與Excel中的if函數一樣,根據判定條件進行不同的分支。

廣播運算

适用于當數組形狀不同時使用,但數組的廣播功能是用規則的,不滿足就會報錯。規則如下:1.各輸入數組的次元可以不相等,但必須確定從右到左的對應次元值相等。

2.如果對應次元值不相等,就必須保證其中一個為1

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

# 各輸入數組次元一緻,對應次元值相等
arr10 = np.arange(12).reshape(3,4)
arr11 = np.arange(101,113).reshape(3,4)
print('3×4的二維矩陣運算:\n',arr10 + arr11)
# 各輸入數組次元不一緻,對應次元值相等
arr12 = np.arange(60).reshape(5,4,3)
arr10 = np.arange(12).reshape(4,3)
print('維數不一緻,但末尾的次元值一緻:\n',arr12 + arr10)
# 各輸入數組次元不一緻,對應次元值不相等,但其中有一個為1
arr12 = np.arange(60).reshape(5,4,3)
arr13 = np.arange(4).reshape(4,1)
print('維數不一緻,次元值也不一緻,但次元值至少一個為1:\n',arr12 + arr13)
# 加1補齊
arr14 = np.array([5,15,25])
print('arr14的次元自動補齊為(1,3):\n',arr10 + arr14)