第3回 配列の取り扱い 追加演習

NumPyの様々な関数・機能を使いこなすため、練習問題に取り組みましょう。

基本的な機能

  1. NumPyをnpという名でインポートしなさい。
  2. 円周率$\pi$を出力しなさい。
  3. $\cos \pi$を出力しなさい。
  4. $\sin 1^\circ$を出力しなさい。
  5. $\sin(\pi\cos 25^\circ)$を出力しなさい。
  6. $e^{2.5}$を出力しなさい。
  7. $|\sin 185^\circ|$を出力しなさい。
  8. $\sqrt{6}$を出力しなさい。
  9. 関数tanhを$\tanh(x)\equiv\frac{e^x-e^{-x}}{e^x+e^{-x}}$として定義しなさい。
  10. $\tanh(\pi/2)$を出力しなさい。
  11. NumPyのなかのtanh関数np.tanhを用いて$\tanh(\pi/2)$を計算し、上と一致することを確かめなさい。
  12. 関数sincを${\rm sinc}(x)\equiv\frac{\sin x}{x}$として定義しなさい。
  13. ${\rm sinc}(0.1)$, ${\rm sinc}(0.01)$, ${\rm sinc}(0.001)$を出力しなさい。
  14. 関数sincが$x\neq0$のとき$\frac{\sin x}{x}$, $x=0$のとき$1$を返すように定義し直しなさい。

配列の生成・操作、ベクトル演算

以下の数列を格納した1次元配列を生成しなさい。

  1. $0, 0, ..., 0, 0$ (30項)
  2. $1, 1, ..., 1, 1$ (30項)
  3. $6, 6, ..., 6, 6$ (30項)
  4. $0, 1, ..., 98, 99$
  5. $5, 6, ..., 11, 12$
  6. $0, 0.01, ..., 0.98, 0.99, 1$ (ヒント:両端点を含むため、101項ある)
  7. $0, 0.02\pi, 0.04\pi, ..., 1.98\pi, 2\pi$
  8. $-1, -0.98, ..., 0.98, 1$
  9. $0^2, 1^2, 2^2, ..., 100^2$
  10. $e^{-5}, e^{-4}, ..., e^4, e^5$
  11. $\cos 0, \cos 0.02\pi, ..., \cos 3.98\pi, \cos 4\pi$
  1. matplotlib.pyplotpltの名でインポートしなさい。
  2. $y=\sin x$のグラフを、$0\leq x \leq 2\pi$の範囲で描きなさい。xの点数は適当に選択すること。
  3. $y=e^{-2x}\cos 2x$のグラフを、$-2\pi \leq x \leq 2\pi$の範囲で描きなさい。
  4. パラメタ表示$x=\cos mt, y=\sin nt$のグラフを、$0\leq t\leq 2\pi$の範囲の$t$について描きなさい。まず$m=1, n=2$について描き、その後自由な組み合わせの$m, n$について描きなさい。

配列の統計・マスク

次の通りに、配列randomを生成しなさい。(0から99までの整数を1000個抽出した乱数列) np.random.default_rngに与えたseed変数12345によって、毎回同じ乱数列が生成されます。 実用の際にはseedを与えないことで、実行ごとに異なる乱数列が得られます。

In [1]:
import numpy as np
rng = np.random.default_rng(seed=12345)
random = rng.integers(low=0, high=100, size=1000)
print(random[:5]) # 第5項まで: 同じものが得られているか確かめましょう
[69 22 78 31 20]
  1. randomの合計を求めなさい。 (48717)
  2. randomの平均を求めなさい。 (48.717)
  3. randomの分散を求めなさい。 (802.902911...)
  4. randomの標準偏差を求めなさい。(28.3355414...)
  5. randomの最大値を求めなさい。 (99)
  6. randomの最小値を求めなさい。 (0)
  7. randomの中央値を求めなさい。 (48)
  8. randomのうち偶数値のマスクを生成しなさい。
  9. randomのうち偶数値がいくつあるか求めなさい。(503)
  10. randomの偶数値の平均を求めなさい。 (49.1848906...)
  11. randomの偶数値の分散を求めなさい。 (834.6676047...)
  12. randomのうち20以上80未満の値のマスクを生成しなさい。
  13. randomのうち20以上80未満の値がいくつあるか求めなさい。(625)
  14. randomのうち20以上80未満の値の平均を求めなさい。 (49.5424)
  15. randomのうち20以上80未満の値の分散を求めなさい。 (295.20180224)

実データの解析

前回の追加演習 (https://yasushifujiwara.github.io/dataanalysistutorial/Drill2_matplotlib.html) から1時間ごとの気温・水温・風速データを入手し、1時間ごとの熱フラックスの変動を解析しなさい。

特に2019年1月1日~2月28日の期間について、1時間ごとのデータから求めた平均顕熱フラックスと1日ごとのデータから求めた平均顕熱フラックスを比較しなさい。1日ごとのデータは第2回の解説で用いたもので、1年のうち0~58日目を抜き出せば得られます。 1時間ごとから求めた顕熱フラックスは上向き約58W/m^2、1日ごとから求めたものは約52W/m^2になると思います。この差はなぜ生まれるのか・どちらがより正確な値と考えられるか、考察しましょう。