您现在的位置是:首页 > 技术教程 正文

头歌Python实训——Numpy 数据统计

admin 阅读: 2024-03-25
后台-插件-广告管理-内容页头部广告(手机)

第1关:创建特定形态的 ndarray 数组

任务描述

本关任务:编写程序求取特定形态的ndarray数组,并输出。

知识讲解
  • NumPy 是 Python 的一种数值计算库,它提供了高效的多维数组和矩阵计算。其核心数据结构的 ndarray 数组。
  • NumPy模块通过import语句引入,习惯用别名np表示。
  • import numpy as np
ndarray数组定义
  • ndarray数组是存储单一数据类型的多维数组结构。通过numpy.array(object)创建,object是数据序列。

    1. >>> import numpy as np
    2. >>> a = np.array([1,2,3,4])
    3. >>> type(a)
    4. <class 'numpy.ndarray'>
    5. >>> a
    6. array([1, 2, 3, 4])

  • ndarray数组的常用属性如下:

    1. ndim:数组维度数
    2. shape:数组尺寸
    3. size:数组的元素个数
    4. dtype:数组元素的类型

 

  1. >>> b = np.array([[1,2,3],[3,4,5]])
  2. >>> b.ndim
  3. 2
  4. >>> b.shape
  5. (2, 3)
  6. >>> b.size
  7. 6
  8. >>> b.dtype
  9. dtype('int32')
ndarray数组变形

在不改变数组元素个数的前提下,可以通过修改数组的shape属性来改变数组形状。

  1. >>> b
  2. array([[1, 2, 3],
  3. [3, 4, 5]])
  4. >>> b.size
  5. 6
  6. >>> b.shape
  7. (2, 3)
  8. >>> b.shape=(3,2)
  9. >>> b
  10. array([[1, 2],
  11. [3, 3],
  12. [4, 5]])
  13. >>> b.size
  14. 6
创建特型数组

numpy提供了一些快速创建特殊形态数组的方法。如:

  • 等差数组:arange(开始值,终值,步长)
    1. >>> np.arange(1,10,2)
    2. array([1, 3, 5, 7, 9])

  • 等比数组:logspace(开始值,终值,个数)
    1. >>> np.logspace(1,2,5)
    2. array([ 10. , 17.7827941 , 31.6227766 , 56.23413252, 100. ])
  • 全0数组:zeros(维度)
    1. >>> np.zeros((2,3))
    2. array([[0., 0., 0.],
    3. [0., 0., 0.]])

  • 全1数组:ones(维度)
    1. >>> np.ones((3,2))
    2. array([[1., 1.],
    3. [1., 1.],
    4. [1., 1.]])

  • 单位矩阵:eye(维度)
    1. >>> np.eye(3)
    2. array([[1., 0., 0.],
    3. [0., 1., 0.],
    4. [0., 0., 1.]])

  • 对角线矩阵:diag(列表)
    1. >>> np.diag([1,2,3])
    2. array([[1, 0, 0],
    3. [0, 2, 0],
    4. [0, 0, 3]])

随机数

numpy.random模块提供了随机数的操作方法。常用的方法有:

  • np.random.random:0-1的随机数
  • np.random.rand:均匀分布随机数
  • np.random.randn:正态分布随机数
  • np.random.randint:给定范围的随机整数
  • np.random.seed:随机数种子,相同的种子产生相同随机数。
  1. >>> np.random.random((2,3))
  2. array([[0.37504179, 0.87765674, 0.77247682],
  3. [0.66231209, 0.63139262, 0.74569536]])
  4. >>> np.random.rand(2,3)
  5. array([[0.87504014, 0.12031278, 0.53230602],
  6. [0.93854757, 0.17804695, 0.65469302]])
  7. >>> np.random.randn(2,3)
  8. array([[-1.15633193, 0.01430615, -0.78105448],
  9. [ 2.21185689, 0.20768009, -0.65431958]])
  10. >>> np.random.randint(1,10,size=[2,3])
  11. array([[5, 9, 6],
  12. [2, 8, 9]])
编程要求

根据提示,在右侧编辑器Begin-End处补充代码。

测试说明

平台会对你编写的代码进行测试: 预期输出:

  1. the result of 1.1 is:
  2. [[-2. 0. 0. 0. 0.]
  3. [ 0. -1. 0. 0. 0.]
  4. [ 0. 0. 0. 0. 0.]
  5. [ 0. 0. 0. 1. 0.]
  6. [ 0. 0. 0. 0. 2.]]
  7. the result of 1.2 is:
  8. [[-8 -6 -4]
  9. [-2 0 2]
  10. [ 4 6 8]]
  11. the result of 1.3 is:
  12. [[False False False]
  13. [False False False]
  14. [ True True True]]
  15. the result of 1.4 is:
  16. [8 9 3 8 8 0 5 3 9 9]
  17. the result of 1.5 is:
  18. [ 0.44122749 -0.33087015 2.43077119 -0.25209213 0.10960984 1.58248112 -0.9092324 -0.59163666 0.18760323 -0.32986996 -1.19276461 -0.20487651 -0.35882895 0.6034716 -1.66478853 -0.70017904 1.15139101 1.85733101 -1.51117956 0.64484751]

详见“预期输出”的结果。

代码内容

  1. """
  2. 作业2:Numpy统计应用
  3. """
  4. '''
  5. 1、创建特定形态的数组
  6. '''
  7. import numpy as np
  8. '''
  9. 1.1
  10. 构建并输出如下数组:
  11. [[-2. 0. 0. 0. 0.]
  12. [ 0. -1. 0. 0. 0.]
  13. [ 0. 0. 0. 0. 0.]
  14. [ 0. 0. 0. 1. 0.]
  15. [ 0. 0. 0. 0. 2.]]
  16. '''
  17. print("the result of 1.1 is:")
  18. ############begin############
  19. np_1 = np.array([[-2., 0., 0., 0., 0.],
  20. [0., -1., 0., 0., 0.],
  21. [0., 0., 0., 0., 0.],
  22. [0., 0., 0., 1., 0.],
  23. [0., 0., 0., 0., 2.]])
  24. print(np_1)
  25. ########### end #############
  26. '''
  27. 1.2
  28. 生成并输出特型数组:
  29. [[-8 -6 -4]
  30. [-2 0 2]
  31. [ 4 6 8]]
  32. '''
  33. print("the result of 1.2 is:")
  34. ############begin############
  35. np_2 = np.array([[-8, -6, -4],
  36. [-2, 0, 2],
  37. [4, 6, 8]
  38. ])
  39. print(np_2)
  40. ########### end #############
  41. '''
  42. 1.3
  43. 特型数组输出:
  44. [[False False False]
  45. [False False False]
  46. [ True True True]]
  47. '''
  48. print("the result of 1.3 is:")
  49. ############begin############
  50. np_3 = np.array([[False, False, False],
  51. [False, False, False],
  52. [True, True, True]
  53. ])
  54. print(np_3)
  55. ########### end #############
  56. '''
  57. 1.4
  58. 生成并输出一个长度为10,在[0,10]范围内的随机数组(seed =3):
  59. [8 9 3 8 8 0 5 3 9 9]
  60. '''
  61. print("the result of 1.4 is:")
  62. ############begin############
  63. np.random.seed(3)
  64. np_4 = np.random.randint(0, 10, size=(10))
  65. print(np_4)
  66. ########### end #############
  67. '''
  68. 1.5
  69. 生成并输出一个长度为20,服从正态分布的随机数组(seed=5)
  70. [ 0.44122749 -0.33087015 2.43077119 -0.25209213 0.10960984 1.58248112
  71. -0.9092324 -0.59163666 0.18760323 -0.32986996 -1.19276461 -0.20487651
  72. -0.35882895 0.6034716 -1.66478853 -0.70017904 1.15139101 1.85733101
  73. -1.51117956 0.64484751]
  74. '''
  75. print("the result of 1.5 is:")
  76. ############begin############
  77. np.random.seed(5)
  78. np_5 = np.random.randn(20)
  79. print(np_5)
  80. ########### end #############

第2关:ndarray 数组访问

任务描述

本关任务:编写程序检索ndarray数组,输出指定结果。

知识讲解
通过索引访问数组
  • 和列表(list)一样,可以使用索引下表和切片的方式访问数组元素。
  • 多维数组有两种访问方法,如下所示。
    1. >>> a = np.ndarray([[1,2],[3,4]])
    2. >>> a[1,0] # 方法1
    3. 3
    4. >>> a[1][0] # 方法2
    5. 3

数组形态的变换
  • 维度变换:reshape
    1. >>> a = np.arange(1,9)
    2. >>> a
    3. array([ 1, 2, 3, 4, 5, 6, 7, 8])
    4. >>> a.reshape([2,4])
    5. array([[ 1, 2, 3, 4],
    6. [ 5, 6, 7, 8]])

  • 展平:ravel
    1. >>> a = np.arange(1,9).reshape([2,4])
    2. >>> a
    3. array([[1, 2, 3, 4],
    4. [5, 6, 7, 8]])
    5. >>> a.ravel()
    6. array([1, 2, 3, 4, 5, 6, 7, 8])

编程要求

根据提示,在右侧编辑器Begin-End处补充代码,完成本关任务。

测试说明

平台会对你编写的代码进行测试: 预期输出:

  1. the result of 2.1 is:
  2. [ 1 3 5 7 9 11 13 15 17 19]
  3. the result of 2.2 is:
  4. [ 0 5 10 15]
  5. the result of 2.3 is:
  6. [[ 0 5]
  7. [10 15]]
  8. the result of 2.4 is:
  9. [[ 0 1 2 3]
  10. [ 8 9 10 11]
  11. [16 17 18 19]]
  12. the result of 2.5 is:
  13. [ 3 19]
  14. the result of 2.6 is:
  15. [ 0 2 4 6 8 10 12 14 16 18 1 3 5 7 9 11 13 15 17 19]
  16. the result of 2.7 is:
  17. [[1 2 1]
  18. [4 5 4]
  19. [7 8 7]]

代码内容

  1. """
  2. 作业2:Numpy统计应用
  3. """
  4. '''
  5. 2
  6. 数组访问
  7. 有数组a = np.array(range(0,20)),试输出:
  8. '''
  9. import numpy as np
  10. a = np.array(range(0,20))
  11. '''
  12. 2.1
  13. [ 1 3 5 7 9 11 13 15 17 19]
  14. '''
  15. print("the result of 2.1 is:")
  16. ############begin############
  17. a_1 = a[1:20:2]
  18. print(a_1)
  19. ########### end #############
  20. '''
  21. 2.2
  22. [ 0 5 10 15]
  23. '''
  24. print("the result of 2.2 is:")
  25. ############begin############
  26. a_2 = a[0:20:5]
  27. print(a_2)
  28. ########### end #############
  29. '''
  30. 2.3
  31. [[ 0 5]
  32. [10 15]]
  33. '''
  34. print("the result of 2.3 is:")
  35. ############begin############
  36. a_3 = a_2.reshape([2, 2])
  37. print(a_3)
  38. ########### end #############
  39. '''
  40. 2.4
  41. [[ 0 1 2 3]
  42. [ 8 9 10 11]
  43. [16 17 18 19]]
  44. '''
  45. print("the result of 2.4 is:")
  46. ############begin############
  47. a_4 = np.array([a[0:4],a[8:12], a[16:20]])
  48. print(a_4)
  49. ########### end #############
  50. '''
  51. 2.5
  52. [ 3 19]
  53. '''
  54. print("the result of 2.5 is:")
  55. ############begin############
  56. a_5 = np.array([a[3], a[19]])
  57. print(a_5)
  58. ########### end #############
  59. '''
  60. 2.6
  61. [ 0 2 4 6 8 10 12 14 16 18 1 3 5 7 9 11 13 15 17 19]
  62. '''
  63. print("the result of 2.6 is:")
  64. ############begin############
  65. a_6_1 = a[0:19:2]
  66. a_6_2 = a[1:20:2]
  67. a_6 = np.array([a_6_1, a_6_2])
  68. a_6 = a_6.ravel()
  69. print(a_6)
  70. ########### end #############
  71. '''
  72. 2.7
  73. [[1 2 1]
  74. [4 5 4]
  75. [7 8 7]]
  76. '''
  77. print("the result of 2.7 is:")
  78. ############begin############
  79. a_7 = np.array([[a[1], a[2], a[1]],
  80. [a[4], a[5], a[4]],
  81. [a[7], a[8], a[7]],
  82. ])
  83. print(a_7)
  84. ########### end #############

第3关:简单矩阵变换

任务描述

本关任务:编写程序,解决矩阵计算中的若干问题。

知识讲解

NumPy模块提供了矩阵计算的专用结构matrix,以及相关计算方法。

矩阵定义

np.matrix(object)方法负责创建矩阵类型对象。

  1. >>> a
  2. array([[1, 2],
  3. [3, 4]])
  4. >>> m = np.matrix(a)
  5. >>> m
  6. matrix([[1, 2],
  7. [3, 4]])
矩阵计算
  • 矩阵对应元素的加减计算:m1±m2
  • 矩阵的3种乘法:
  • 矩阵与数值相乘:m1*3
  • 矩阵*矩阵:m1*m2
  • 矩阵对应元素相乘:np.multiply(m1*m2)
  1. >>> a
  2. array([[1, 2],
  3. [3, 4]])
  4. >>> m1 = np.matrix(a)
  5. >>> m1
  6. matrix([[1, 2],
  7. [3, 4]])
  8. >>> b
  9. array([[5, 6],
  10. [7, 8]])
  11. >>> m2 = np.matrix(b)
  12. >>> m2
  13. matrix([[5, 6],
  14. [7, 8]])
  15. >>> m1*3
  16. matrix([[ 3, 6],
  17. [ 9, 12]])
  18. >>> m1*m2
  19. matrix([[19, 22],
  20. [43, 50]])
  21. >>> np.multiply(m1,m2)
  22. matrix([[ 5, 12],
  23. [21, 32]])
编程要求

根据提示,在右侧编辑器Begin-End处补充代码,完成本关任务。

测试说明

平台会对你编写的代码进行测试: 预期输出:

  1. the result of 3.1 is:
  2. [[ 3 6 9]
  3. [12 15 18]
  4. [21 24 27]]
  5. the result of 3.2 is:
  6. [[0. 2. 3.]
  7. [4. 4. 6.]
  8. [7. 8. 8.]]
  9. the result of 3.3 is:
  10. [[1 2 3 1 2 3]
  11. [4 5 6 4 5 6]
  12. [7 8 9 7 8 9]]
  13. the result of 3.4 is:
  14. [[1 4 7]
  15. [2 5 8]
  16. [3 6 9]]

代码内容

  1. """
  2. 作业2:Numpy统计应用
  3. """
  4. '''
  5. 3、矩阵计算
  6. 有矩阵m = np.mat("1 2 3;4 5 6;7 8 9"),试求解并输出:
  7. '''
  8. import numpy as np
  9. m = np.mat("1 2 3;4 5 6;7 8 9")
  10. '''
  11. 3.1
  12. [[ 3 6 9]
  13. [12 15 18]
  14. [21 24 27]]
  15. '''
  16. print("the result of 3.1 is:")
  17. ############begin############
  18. m_1 = m * 3
  19. print(m_1)
  20. ########### end #############
  21. '''
  22. 3.2
  23. [[0. 2. 3.]
  24. [4. 4. 6.]
  25. [7. 8. 8.]]
  26. '''
  27. print("the result of 3.2 is:")
  28. ############begin############
  29. n_1 = np.mat('1. 0. 0.;0. 1. 0.;0. 0. 1.')
  30. m_2 = m - n_1
  31. print(m_2)
  32. ########### end #############
  33. '''
  34. 3.3
  35. [[1 2 3 1 2 3]
  36. [4 5 6 4 5 6]
  37. [7 8 9 7 8 9]]
  38. '''
  39. print("the result of 3.3 is:")
  40. ############begin############
  41. #n_2 = np.mat('0 0 0 1 2 3;0 0 0 4 5 6;0 0 0 7 8 9')
  42. #m_3 = m + n_2
  43. m_3 = np.insert(m, 3, [1, 4 ,7], axis=1)
  44. m_3 = np.insert(m_3, 4, [2, 5 ,8], axis=1)
  45. m_3 = np.insert(m_3, 5, [3, 6, 9], axis=1)
  46. print(m_3)
  47. ########### end #############
  48. '''
  49. 3.4
  50. 转置矩阵
  51. [[1 4 7]
  52. [2 5 8]
  53. [3 6 9]]
  54. '''
  55. print("the result of 3.4 is:")
  56. ############begin############
  57. m_4 = m.T
  58. print(m_4)
  59. ########### end #############

第4关:NumPy 统计应用

任务描述

本关任务:编写程序,读取iris_sepal_length.csv文件,计算鸢尾花数据集中花萼样本的频度分布。

知识讲解

为了完成本关任务,你需要掌握:1.csv文件读取,2.comsum函数应用,3.格式化输出。

用numpy读取csv数据文件

numpy中的loadtxt(file,delimiter)方法可以读取文本文件,其中参数file是文件路径,参数delimiter用于指定分隔符,csv文件的分隔符为逗号,,该方法返回一个二维数组

常用的统计函数
函数名功能
amin最小值
amax最大值
sum求和
mean平均值
std标准差
var方差
cumsum所有元素的累积和

注意:numpy提供了在不同维度上进行统计的功能,用参数axis指定统计的轴。例如:对于2维数组,axis=1表示以纵轴为基准,统计横轴数据;axis=0表示以横轴为基准,统计纵轴数据。

编程要求

根据提示,在右侧编辑器Begin-End处补充代码,完成本关任务。

测试说明

平台会对你编写的代码进行测试: 预期输出:

  1. the result of 4 is:
  2. Simple size: 150
  3. Range:Size(Percent)
  4. 4 - 5: 22 (14.7%)
  5. 5 - 6: 61 (40.7%)
  6. 6 - 7: 54 (36.0%)
  7. 7 - 8: 13 (8.7%)

详见评测预期。

代码内容

  1. """
  2. 作业2:Numpy统计应用
  3. """
  4. '''
  5. 4、NumPy统计应用
  6. 文件iris_sepal_length.csv存储150个鸢尾花花萼长度样本数据,请利用Numpy模块的统计功能,计算花萼长度的频度分布。
  7. 提示:np.cumsum()
  8. 输出样式:
  9. Simple size: 150
  10. Range:Size(Percent)
  11. 4 - 5: 22 (14.7%)
  12. 5 - 6: 61 (40.7%)
  13. 6 - 7: 54 (36.0%)
  14. 7 - 8: 13 (8.7%)
  15. '''
  16. import numpy as np
  17. print("the result of 4 is:")
  18. ############begin############
  19. x = np.loadtxt('./iris_sepal_length.csv', delimiter=',')
  20. print('Simple size: '+ str(len(x)))
  21. print()
  22. print('Range:Size(Percent)')
  23. count_1, count_2, count_3, count_4= 0, 0, 0, 0
  24. for i in x:
  25. if (i >= 4 and i < 5):
  26. count_1 += 1
  27. if (i >= 5 and i < 6):
  28. count_2 += 1
  29. if (i >= 6 and i < 7):
  30. count_3 += 1
  31. if (i >= 7 and i < 8):
  32. count_4 += 1
  33. count = count_1 + count_2 + count_3 + count_4
  34. print('4 - 5:', count_1, '({:.1%})'.format(count_1 / count))
  35. print('5 - 6:', count_2, '({:.1%})'.format(count_2 / count))
  36. print('6 - 7:', count_3, '({:.1%})'.format(count_3 / count))
  37. print('7 - 8:', count_4, '({:.1%})'.format(count_4 / count))
  38. ########### end #############

标签:
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

在线投稿:投稿 站长QQ:1888636

后台-插件-广告管理-内容页尾部广告(手机)
关注我们

扫一扫关注我们,了解最新精彩内容

搜索
排行榜