へっぽこ研究者、立ち上がるってよ

あなたを応援するブログ

松尾研究室データサイエンティスト育成講座の練習問題、第二章前半の解答

こんにちは、データサイエンスもできるともっとやれることが広がるよねと考えているへっぽこ研究者です。

今回は東大の松尾研究室が公開してくださっているデータサイエンティスト育成講座の第二章前半の練習問題について自分なりの解答をご紹介します。

各章の解答は以下の記事にまとめていきます。

www.oyakuni.com

2.1.1 Numpyの基礎

練習問題1

1から50までの自然数の和を計算するプログラムを書いて、最後の計算結果を表示させるプログラムを書いてください。ただし、Numpyを使ってください。

import numpy as np
#配列作成
numpy_data = np.arange(51)
#Numpyで計算
numpy_data_sum = np.sum(numpy_data)
print(numpy_data_sum)

結果

1275

練習問題2

正規分布に従う乱数を10個発生させて配列を作成してください。また、その中での最小値、最大値、合計を求めるプログラムを書いてください。

import numpy as np
import numpy.random as random

#乱数固定
random.seed(0)
# 正規分布(平均0、分散1)の乱数を10個発生
norm_random_data = random.randn(10)

print("Max",norm_random_data.max())
print("min",norm_random_data.min())
print("Sum",norm_random_data.sum())

結果

#作成した乱数
[-0.417 -0.056 -2.136  1.64  -1.793 -0.842  0.503 -1.245 -1.058 -0.909]
Max 1.6402708084049886
min -2.136196095668454
Sum -6.31349941598471

練習問題3

要素がすべて3の5行5列の行列を作成し、その行列の2乗をする計算をしてみましょう。

import numpy as np

#5行5列の行列作成
gyou = np.array([3]*25).reshape(5,5)
print(gyou)
#行列の2乗を計算
gyou2=np.dot(gyou,gyou)
print(gyou2)

結果

[[3 3 3 3 3]
 [3 3 3 3 3]
 [3 3 3 3 3]
 [3 3 3 3 3]
 [3 3 3 3 3]]
[[45 45 45 45 45]
 [45 45 45 45 45]
 [45 45 45 45 45]
 [45 45 45 45 45]
 [45 45 45 45 45]]

2.1.2 Scipyの基礎

練習問題1

以下の行列について、行列式を求めてください。 (行列略)

import numpy as np
import scipy as sp
import scipy.linalg as linalg

gyou = np.array([[1,2,3],[1,3,2],[3,1,2]])
print("行列式")
print(linalg.det(gyou))

結果

[[1 2 3]
 [1 3 2]
 [3 1 2]]
行列式
-12.000000000000002

練習問題2

上と同じ行列について、逆行列固有値固有ベクトルを求めてください。

print("逆行列")
print(linalg.inv(gyou))

# 固有値と固有ベクトルをそれぞれ計算
eig_value, eig_vector = linalg.eig(gyou)

print("固有値")
print(eig_value)
print("固有ベクトル")
print(eig_vector)

結果

逆行列
[[-0.333  0.083  0.417]
 [-0.333  0.583 -0.083]
 [ 0.667 -0.417 -0.083]]
固有値
[ 6.   +0.j -1.414+0.j  1.414+0.j]
固有ベクトル
[[-0.577 -0.722  0.16 ]
 [-0.577 -0.143 -0.811]
 [-0.577  0.677  0.563]]

練習問題3

以下の関数が0となる解を求めてみましょう。 𝑓(𝑥)=𝑥3+2𝑥+1

#関数の定義
def function(x):
    return(x**3 + 2*x +1)

#ニュートン法で計算
from scipy.optimize import newton
print(newton(function,0))

結果

-0.4533976515164037

おわりに

練習問題は基本的に講座の文章をちゃんと読んでいれば解けますね。 といってもわからない部分はちょこちょこググっていますが。

次回は後半部の解答を記事にします。 これまでの解答まとめは以下をごらんください。 www.oyakuni.com

へっぽこサイエンティストでしたー