一次関数と等差数列
一次関数をテストするときに必須になるのが等差数列。等差数列とは要素と要素の間の差が等しいもの。
例えば1, 2, 3, 4, 5, 6は等差が1の数列である。等差が2になると、1, 3, 5, 7, 9, 11となる。
numpy.linspace()
等差数列を作るためにはnumpy.linspace()を使えばよい。
numpy.linspace()のマニュアルはこちらに記載されている : numpy.linspace()
numpy.linspace()の基本的な使い方
パラメータのstartには等差数列を開始する値、endには等差数列を終了する値を指定する。numには生成する要素の数を指定する。これはデフォルトでは50となっている。
とりあえずstart, endのみ指定して等差数列を作ってみる。
print(np.linspace(0,49)) # [ 0. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49.]
次にnumを指定して生成する要素の数を変えてみる。
print(np.linspace(0,99, num=100)) # [ 0. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99.]
endpointを指定して求めたい等差数列を作る
numpy.linspace()は等差数列を作るのに便利な関数であるが、実際にほしい等差数列を作るためにはちょっとしたコツがある。開発をしているときにイメージする等差数列は開始点、終了点、等差が決まっている数列である。例えば開始点が0、終了点が100、等差2としてみる。これを作成するために開始点0, 終了点100、num=50を指定してみる。
numが50なのは、(100-0)/2から計算してみる。
print(np.linspace(0,100, num=50)) # [ 0. 2.04081633 4.08163265 6.12244898 8.16326531 10.20408163 12.24489796 14.28571429 16.32653061 18.36734694 20.40816327 22.44897959 24.48979592 26.53061224 28.57142857 30.6122449 32.65306122 34.69387755 36.73469388 38.7755102 40.81632653 42.85714286 44.89795918 46.93877551 48.97959184 51.02040816 53.06122449 55.10204082 57.14285714 59.18367347 61.2244898 63.26530612 65.30612245 67.34693878 69.3877551 71.42857143 73.46938776 75.51020408 77.55102041 79.59183673 81.63265306 83.67346939 85.71428571 87.75510204 89.79591837 91.83673469 93.87755102 95.91836735 97.95918367 100. ]
上記のように要素の値が少しずれた配列が生成される。これは等差が2である場合には実際に生成される要素は51になるためである。よって以下のようにする。
print(np.linspace(0,100, num=51)) #[ 0. 2. 4. 6. 8. 10. 12. 14. 16. 18. 20. 22. 24. 26. 28. 30. 32. 34. 36. 38. 40. 42. 44. 46. 48. 50. 52. 54. 56. 58. 60. 62. 64. 66. 68. 70. 72. 74. 76. 78. 80. 82. 84. 86. 88. 90. 92. 94. 96. 98. 100.]
このようなときに直感的にわかりやすいのが、endpoint=Falseである。endpoint=Falseを指定すると等差=(終了点-開始点)/numとなる。
print(np.linspace(0,100, num=50, endpoint=False)) # [ 0. 2. 4. 6. 8. 10. 12. 14. 16. 18. 20. 22. 24. 26. 28. 30. 32. 34. 36. 38. 40. 42. 44. 46. 48. 50. 52. 54. 56. 58. 60. 62. 64. 66. 68. 70. 72. 74. 76. 78. 80. 82. 84. 86. 88. 90. 92. 94. 96. 98.]
公差を表示する – retstep
retstepはデフォルトではFalseである。これによりnumpy.linspace()の戻り値は生成された数列のみである。retstep=Trueにすることで公差も表示できる。
print(np.linspace(0,100, num=11,retstep=True)) # (array([ 0., 10., 20., 30., 40., 50., 60., 70., 80., 90., 100.]), 10.0)