2. numpy 問題

以下の問題の最後に書いてある行数と文字数は,import numpy as npを除いた模範解答の長さです.また前の問題の結果を用いる場合には,新しい部分のみの行数・文字数を意味しています.ただしこれは明確さを確保して最も短く書いた場合であり,複数行に分けて長くなっても良いです.まず,正解を見ずに

やってみてください.実際にpython (ipythonがお勧め)で入力してみて,その結果を表示してみると良いです.次に正解を見て,自分では解答が分からなかったり正解と大きく違う場合は,なぜ正解がそのように書かれているのかをpythonやnumpyの解説本,あるいはwebの情報で理解しましょう.その後に,また問題だけ見て,解答してみましょう.

1. 配列生成

Ex. 1.1. (2,3)のサイズの全要素が1である配列xを作成せよ.ヒント:要素が1である配列の生成はnp.ones, 要素がゼロである配列の生成はnp.zerosを使う.(1行16文字)

Ex. 1.2. 大きさ(2,3)で,全要素が0である配列xを生成せよ.ヒント:numpy.zeros を使う.(1行17文字)

Ex. 1.3. 大きさ(2行,3列)で,全要素がnanである配列xを生成せよ.ヒント:numpy.zeros から戻る配列とnanのかけ算を行う.(1行24文字)

Ex. 1.4. 大きさ(2行,3列)で,全要素がゼロである単精度浮動小数点の配列xを生成せよ.ヒント:numpy.ones, numpy.zeros では,dtype=で生成する要素のタイプを指定することができる.(1行32文字)

Ex. 1.5. 大きさ(2行,3列)の正規乱数配列xを作成せよ.ヒント:numpy.random.randnを使う.(1行22文字)

Ex. 1.6. 大きさ(2行,3列)の(0,1)の間に分布する一様乱数配列xを作成せよ.ヒント:numpy.random.randを使う.(1行21文字)

2. 配列演算

Ex. 2.1 配列[[1,2],[3,4]]と配列[[1,1],[2,2]]の要素毎の乗算を行え.(1行47文字)

Ex. 2.2. 配列[[1,2],[3,4]]と配列[[1,1],[2,2]]の行列の乗算を行え.ヒント:numpyではnumpy.dot関数で行列の積を求めることができる.(1行55文字)

Ex. 2.3. 配列[[1,2],[3,4]]と配列[[1,1],[2,2]]の整数行列要素毎の除算を行え.(1行47文字)

Ex. 2.4. 配列[[1,2],[3,4]]と配列[[1,1],[2,2]]の整数行列要素毎の除算を行え.ただし,少なくとも一方の行列を浮動小数点とすること.(1行63文字)

Ex. 2.5. 行列[[1,2],[3,4]]とその逆行列の積を求め,計算誤差程度で単位行列になっていることを確認せよ.ヒント:numpy ではnumpy.linalg.inv関数で行列の逆行列を求めることができる.(1行70文字)

3. 行列要素の和,最大値(最小値)

Ex. 3.1. Ex 1.5の配列xの全要素の和を求めよ.ヒント:np.sumを使う.(1行9文字)

Ex. 3.2. Ex 1.5の配列xの最も左のaxis(axis=0)での和を求めよ.ヒント:np.sumを使い,axisを指定する.(1行16文字)

Ex. 3.3. Ex 1.5の配列xの最も右のaxis(axis=-1)での和を求めよ.ヒント:np.sumを使い,axisを指定する.axis=-1を使うことで,配列が何次元であっても,最も右のaxisについて計算を行うことができる.(1行17文字)

※ Ex3.1- Ex.3.3の和を求める代わりに,最大値を求めよ.

※ Ex3.1 Ex.3.3で扱う配列xの適当なところにnanを入れ,sumの代わりにnansumを用いて,計算を行い,どのような結果が得られるかをチェックせよ.

最大値を求めるnp.maxあるいはnp.nanmaxの代わりに,最小値を求めるにはnp.minを用いるとよい.

4. ブロードキャスト(ちょっと高度,見延も最近(2018年9月)まで正確には理解していませんでした)

Ex. 4.1. Ex.1で作成した配列xの第一列に2, 第二列に4を乗ずる(かけ算)操作を,ブロードキャストを用いて行え.(1行17文字)

Ex. 4.2. Ex.1で作成した配列xの第一列に2, 第二列に4を乗ずる操作を,ブロードキャストを用いて行え.(1行30文字)