Educoder python NumPy基礎及取值操作 第3關:基礎操作

 題目鏈接:https://www.educoder.net/tasks/uwohnfelbk4j


任務描述

本關任務:根據本關所學知識,補全右側代碼編輯器中缺失的代碼,完成程序的編寫並通過所有測試用例。

相關知識

爲了完成本關任務,你需要掌握:

  • 算術運算;
  • 矩陣運算;
  • 簡單統計。

算術運算

如果想要對ndarray對象中的元素做elementwise(逐個元素地)的算術運算非常簡單,加減乘除即可。代碼如下:


 
  1. import numpy as np
  2.  
  3. a = np.array([0, 1, 2, 3])
  4.  
  5. # a中的所有元素都加2,結果爲[2, 3, 4, 5]
  6. b = a + 2
  7.  
  8. # a中的所有元素都減2,結果爲[-2, -1, 0, 1]
  9. c = a - 2
  10.  
  11. # a中的所有元素都乘以2,結果爲[0, 2, 4, 6]
  12. d = a * 2
  13.  
  14. # a中的所有元素都平方,結果爲[0, 1, 4, 9]
  15. e = a ** 2
  16.  
  17. # a中的所有元素都除以2,結果爲[0, 0.5, 1, 1.5]
  18. f = a / 2
  19.  
  20. # a中的所有元素都與2比,結果爲[True, True, False, False]
  21. g = a < 2

矩陣運算

相同shape的矩陣A與矩陣B之間想要做elementwise運算也很簡單,加減乘除即可。代碼如下:


 
  1. import numpy as np
  2.  
  3. a = np.array([[0, 1], [2, 3]])
  4. b = np.array([[1, 1], [3, 2]])
  5.  
  6. # a與b逐個元素相加,結果爲[[1, 2], [5, 5]]
  7. c = a + b
  8.  
  9. # a與b逐個元素相減,結果爲[[-1, 0], [-1, 1]]
  10. d = a - b
  11.  
  12. # a與b逐個元素相乘,結果爲[[0, 1], [6, 6]]
  13. e = a * b
  14.  
  15. # a的逐個元素除以b的逐個元素,結果爲[[0., 1.], [0.66666667, 1.5]]
  16. f = a / b
  17.  
  18. # a與b逐個元素做冪運算,結果爲[[0, 1], [8, 9]]
  19. g = a ** b
  20.  
  21. # a與b逐個元素相比較,結果爲[[True, False], [True, False]]
  22. h = a < b

細心的同學應該發現了,*只能做elementwise運算,如果想做真正的矩陣乘法運算顯然不能用*NumPy提供了@dot函數來實現矩陣乘法。代碼如下:


 
  1. import numpy as np
  2.  
  3. A = np.array([[1, 1], [0, 1]])
  4. B = np.array([[2, 0], [3, 4]])
  5.  
  6. # @表示矩陣乘法,矩陣A乘以矩陣B,結果爲[[5, 4], [3, 4]]
  7. print(A @ B)
  8.  
  9. # 面向對象風格,矩陣A乘以矩陣B,結果爲[[5, 4], [3, 4]]
  10. print(A.dot(B))
  11.  
  12. # 面向過程風格,矩陣A乘以矩陣B,結果爲[[5, 4], [3, 4]]
  13. print(np.dot(A, B))

簡單統計

有的時候想要知道ndarray對象中元素的和是多少,最小值是多少,最小值在什麼位置,最大值是多少,最大值在什麼位置等信息。這個時候可能會想着寫一個循環去遍歷ndarray對象中的所有元素來進行統計。NumPy爲了解放我們的雙手,提供了summinmaxargminargmax等函數來實現簡單的統計功能,代碼如下:


 
  1. import numpy as np
  2.  
  3. a = np.array([[-1, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 13]])
  4.  
  5. # 計算a中所有元素的和,結果爲67
  6. print(a.sum())
  7.  
  8. # 找出a中最大的元素,結果爲13
  9. print(a.max())
  10.  
  11. # 找出a中最小的元素,結果爲-1
  12. print(a.min())
  13.  
  14. # 找出a中最大元素在a中的位置,由於a中有12個元素,位置從0開始計,所以結果爲11
  15. print(a.argmax())
  16.  
  17. # 找出a中最小元素在a中位置,結果爲0
  18. print(a.argmin())

有的時候,我們在統計時需要根據軸來統計。舉個例子,公司員工的基本工資,績效工資,年終獎的信息如下:

工號 基本工資 績效工資 年終獎
1 3000 4000 20000
2 2700 5500 25000
3 2800 3000 15000

這樣一個表格很明顯,可以用ndarray來存儲。代碼如下:


 
  1. import numpy as np
  2.  
  3. info = np.array([[3000, 4000, 20000], [2700, 5500, 25000], [2800, 3000, 15000]])

info實例化之後就有了維度和軸的概念,很明顯info是個二維數組,所以它的維度是2。維度爲2換句話來說就是info兩個軸:0號軸與1號軸(軸的編號從0開始算)。軸所指的方向如下圖所示:

如果想要統計下這3位員工中基本工資、績效工資與年終獎的最小值與最大值(也就是說分別統計出每一列中的最小與最大值)。我們可以沿着0號軸來統計。想要實現沿着哪個軸來統計,只需要修改axis即可,代碼如下:


 
  1. import numpy as np
  2.  
  3. info = np.array([[3000, 4000, 20000], [2700, 5500, 25000], [2800, 3000, 15000]])
  4.  
  5. # 沿着0號軸統計,結果爲[2700, 3000, 15000]
  6. print(info.min(axis=0))
  7.  
  8. # 沿着0號軸統計,結果爲[3000, 5500, 25000]
  9. print(info.max(axis=0))

PS:當沒有修改axis時,axis的值默認爲None。意思是在統計時會把ndarray對象中所有的元素都考慮在內。

編程要求

根據提示,在右側編輯器Begin-End處補充代碼,根據測試用例的輸入,打印每行的最大值的位置。

  • 具體要求請參見後續測試樣例。

請先仔細閱讀右側上部代碼編輯區內給出的代碼框架,再開始你的編程工作!

測試說明

平臺會對你編寫的代碼進行測試,對比你輸出的數值與實際正確的數值,只有所有數據全部計算正確才能進入下一關。

測試輸入:

[[0.2, 0.7, 0.1], [0.1, 0.3, 0.6]]

預期輸出:

[1 2]

開始你的任務吧,祝你成功!

import numpy as np
def get_answer(input_data):
    '''
    將ipnut_data轉換成ndarray後統計每一行中最大值的位置並打印
    :param input_data: 測試用例,類型爲list
    :return: None
    '''
    #********* Begin *********#
    print(np.array(input_data).argmax(axis=1))
    #********* End *********#

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章