Python

[Q11-20]Pythonの「100 numpy exercises」をひたすらやってみた話[訳+実行結果]

こんにちは,しまさん(@shimasan0x00)です.

最近Pythonを扱う機会に恵まれています(というか自分から積極的に使っています).

私の場合はDeep Learningなんかを勉強したり,扱うことが多いので必然とNumpyを触る機会が増えます.

本でも勉強できますが,Github上で「100 numpy exercises」という100問の問題を通してNumpyについて学ぶことができるものがあるので試してみることにしました.

問題が英語なので訳と実行結果を載せていきたいと思います.

今回はQ11-20です.

環境

macOS Mojave 10.14

pyenv Python 3.6.7

numpy 1.15.4

・Q1以降はNumpyを「np」でインポートしてあるものとする.

・Jupyter Notebook環境で行なっている.

・マーカーが引いてある問題は解答が「100 numpy exercises」とは異なる.

スポンサーリンク

100 numpy exercises

より良い解もしくは問題の問題があった場合はこちら

スポンサーリンク

Q11-Q20

Q11. 3×3の単位行列を生成せよ.

A = np.eye(3)
A
array([[ 1.,  0.,  0.],
       [ 0.,  1.,  0.],
       [ 0.,  0.,  1.]])

Q12. 3×3×3の乱数で初期化された行列を生成せよ.

A = np.random.random((3,3,3))
A
array([[[ 0.96309702,  0.5018243 ,  0.99278534],
        [ 0.07699603,  0.94948306,  0.90988024],
        [ 0.854487  ,  0.80084319,  0.21630648]],

       [[ 0.40347921,  0.77486489,  0.96780614],
        [ 0.68045322,  0.75563865,  0.7039515 ],
        [ 0.40939085,  0.3241051 ,  0.38316663]],

       [[ 0.55928469,  0.3827205 ,  0.52287199],
        [ 0.65015349,  0.2189724 ,  0.32280251],
        [ 0.5652342 ,  0.86951462,  0.27255637]]])

Q13. 10×10の乱数で初期化された行列における最大値と最小値を求めよ.

A = np.random.random((10,10))
A.max()
A.min()
0.99614156534060805
4.4466364678252823e-05

Q14. size30(30次元)の乱数で初期化された行列の平均値を求めよ.

A = np.random.random(30)
A.mean()
0.4650469468421094

Q15. 周囲が1,中が0の2次元配列を生成せよ.

1が全角なので注意してください.

A = np.zeros((10,10))
A[0:10:9,0:10] = 1
A[:9,0:10:9] = 1
A
array([[1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
       [1., 0., 0., 0., 0., 0., 0., 0., 0., 1.],
       [1., 0., 0., 0., 0., 0., 0., 0., 0., 1.],
       [1., 0., 0., 0., 0., 0., 0., 0., 0., 1.],
       [1., 0., 0., 0., 0., 0., 0., 0., 0., 1.],
       [1., 0., 0., 0., 0., 0., 0., 0., 0., 1.],
       [1., 0., 0., 0., 0., 0., 0., 0., 0., 1.],
       [1., 0., 0., 0., 0., 0., 0., 0., 0., 1.],
       [1., 0., 0., 0., 0., 0., 0., 0., 0., 1.],
       [1., 1., 1., 1., 1., 1., 1., 1., 1., 1.]])

Q16. 既存の配列の周囲を0で埋めた配列を生成せよ.

A = np.random.random((4,4))
B= np.pad(A, pad_width=1, mode='constant', constant_values=0)
B
array([[0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        ],
       [0.        , 0.75504926, 0.9760656 , 0.95543119, 0.93208485,
        0.        ],
       [0.        , 0.32878856, 0.34344633, 0.36713609, 0.74243075,
        0.        ],
       [0.        , 0.43629738, 0.0941207 , 0.41793008, 0.66668244,
        0.        ],
       [0.        , 0.33398253, 0.95541295, 0.44512263, 0.09594012,
        0.        ],
       [0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        ]])

Q17. 以下の式の結果はどうなるか

print(0 * np.nan)
print(np.nan == np.nan)
print(np.inf > np.nan)
print(np.nan - np.nan)
print(np.nan in set([np.nan]))
print(0.3 == 3 * 0.1)
nan
False
False
nan
True
False

Q18. 5×5の対角成分の下に1,2,3,4がある行列を生成せよ.

A = np.diag(1+np.arange(4),k=-1)
A
[[0 0 0 0 0]
 [1 0 0 0 0]
 [0 2 0 0 0]
 [0 0 3 0 0]
 [0 0 0 4 0]]

Q19. 8×8の市松模様(白黒が碁盤目状になった模様)の行列を作成せよ

A = np.zeros((8,8),dtype=int)
A[::2,::2] = 1
A[::2,1::2] = 1
A
array([[1, 0, 1, 0, 1, 0, 1, 0],
       [0, 1, 0, 1, 0, 1, 0, 1],
       [1, 0, 1, 0, 1, 0, 1, 0],
       [0, 1, 0, 1, 0, 1, 0, 1],
       [1, 0, 1, 0, 1, 0, 1, 0],
       [0, 1, 0, 1, 0, 1, 0, 1],
       [1, 0, 1, 0, 1, 0, 1, 0],
       [0, 1, 0, 1, 0, 1, 0, 1]])

Q20. 6×7×8の行列の100番目の要素のインデックスを求めよ.

np.unravel_index(99, (6,7,8))
(1, 5, 3)

さいごに

今回は「100 numpy exercises」のQ11-Q20を解きました.

Q19はおもしろかったです.

またゆるゆると更新していきたいと思います.

ABOUT ME
しまさん
高専→大学編入→大学院→? / 計算社会科学,ウェブマイニングなど / グレープフルーツと本が好き / SNS(Twitter,YouTube,Twitch)やVTuberのデータ分析屋 詳しいプロフィールはこちら≫ 投げ銭はコチラ