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开始算)。轴所指的方向如下图所示:

Educoder python NumPy基础及取值操作 第3关:基础操作_第1张图片

如果想要统计下这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 *********#

 

你可能感兴趣的:(Educoder编程题答案解析)