とある変人のお道具箱

技術系のことにについて幅広く触れていくブログです

Numpyの練習 100 Numpy Exercises Q11-Q15

前回はこちら

www.henjins-toolbox.tech

この記事の続きです。今回は100 numpy exercisesのQ11-Q15を解いていきます。
    

11. Create a 3x3 identity matrix

(3×3の単位行列を作れ)

Z = np.eye(3,3)
#Z = np.identity(3)
print(Z)
[[1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]]

np.eye()またはnp.identity()を使うと単位行列を作ることができます。np.identity()は正方行列しか作れないのに対し、np.eye()は正方行列以外でも作ることができます。
    

12. Create a 3x3x3 array with random values

(ランダムな値で3×3×3行列を作れ)

Z = np.random.random((3,3,3))
#Z = np.random.randn(3,3,3)
print(Z)
[[[0.65628201 0.89587264 0.5684735 ]
  [0.52494176 0.19828118 0.1314281 ]
  [0.36155071 0.74263145 0.3993159 ]]

 [[0.98248297 0.78123878 0.5896658 ]
  [0.30978694 0.50010674 0.82483769]
  [0.76658272 0.23003625 0.78384858]]

 [[0.09522814 0.8542436  0.02493437]
  [0.75146041 0.65943534 0.86559432]
  [0.73027292 0.32267789 0.85242001]]]

この実行結果はあくまで一例です。乱数なので実行するたびに結果の数値が変わります。
np.random.randn()は正規分布の乱数を返します。
np.random.random()は一様分布の乱数を返します。
他にもnumpyには乱数生成系の関数が大量にあります。この記事で説明はしませんがこちらの記事で紹介されているので興味があれば見てみてください(外部ページです)
NumPy, randomで様々な種類の乱数の配列を生成 | note.nkmk.me
    

13. Create a 10x10 array with random values and find the minimum and maximum values

(ランダムな値の10×10行列を作成し、最小値を最大値を求めなさい)

Z = np.random.rand(10,10)
#print(Z)
Z_min,Z_max = Z.min(),Z.max()
print(Z_min,Z_max)
0.007054315076453599 0.9928757187275835

この実行結果もあくまで一例です。乱数なので実行するたびに結果の数値が変わります。特記することはありません。
    

14. Create a random vector of size 30 and find the mean value

(サイズが30のランダムなベクトルを作成し、平均値を求めよ)

Z = np.random.random(30)
mean = Z.mean()
print(mean)
0.48757038477921383

これも乱数なので毎回結果は変わります。
mean()で平均値が求められます。
    

15. Create a 2d array with 1 on the border and 0 inside

(境界に1、内部に0を持つ2次元配列を作れ)

Z = np.ones((10,10))
Z[1:-1,1:-1] = 0
print(Z)
[[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.]]

イメージとしては最初に全て1の配列を作成してから、スライスで指定して内部を0にしていく感じです。スライスの使い方は慣れみたいなものなので色々いじってみて覚えていくのがいいと思います。
    

続きはこちら

www.henjins-toolbox.tech