スポンサーリンク
こんにちは,しまさん(@shimasan0x00)です.
最近Pythonを扱う機会に恵まれています(というか自分から積極的に使っています).
私の場合はDeep Learningなんかを勉強したり,扱うことが多いので必然とNumpyを触る機会が増えます.
本でも勉強できますが,Github上で「100 numpy exercises」という100問の問題を通してNumpyについて学ぶことができるものがあるので試してみることにしました.
問題が英語なので訳と実行結果を載せていきたいと思います.
今回はQ11-20です.
スポンサーリンク
Contents
環境
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[1: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[1::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はおもしろかったです.
またゆるゆると更新していきたいと思います.
スポンサーリンク
スポンサーリンク