NumPy User Guide を読んでみた #2


AIって結局何なのかよく分からないので、とりあえず100日間勉強してみた Day2


経緯についてはこちら


NumPy User Guide を読んでみた #1 はこちら


■本日の進捗

●NumPy User Guide を理解

■Numpyの使い方で調べたこと

前回に続いてNumPy User Guideを読んでみたので気になった点を挙げて理解を深めていきます。

●Slicingについて

恐らく超基礎項目から。
Data[0:2]はIndex0からIndex2までのことなのかな?と思ったが、どうやら「Index0から2つ」という意味らしい。

Data[-2:]に関しては Index-2 はそもそも存在しない(いや、数値を返すんだから存在するのか… 何だか複素数みたいだな)。「Index2を含む」と考えた方が理解が良いかもしれない。

●nonzeroはゼロでないインデックスを返す

これは一見意味がわからないが、次のように考えるとわかりやすい。
array([[0, 1, 0],
       [4, 0, 5]])
ゼロでない場所のインデックスを意識してみよう。
最初の 1 は0行1列目に存在する。(インデックスは通常0から始まる)
次の 4 は1行0列目に、その次の 5 は1行2列目にそれぞれ存在する。
これをまとめて書けば、下記のようになる。

行インデックス: array([0, 1, 1])
列インデックス: array([1, 0, 2])

あらびっくり、nonzeroの返り値と一緒になりましたね。

●Hsplitの意味

ぱっと見意味不明だが、これも一度理解すれば何てことはないと思います。

これはつまり、xを分割するのに、まず3列目(Index0〜2)までで分割。
次に4列目(Index3)を分割して、残りは何の指定もないので区切ることなく出力すれば上記の通りになる。

●flattenとravel

要点のみ。
np.flattenは、元の配列のコピーを作成し、1次元の配列を返す。
np.ravelは、元の配列のビューを返す(コピーを作成することもある)。
flattenは常に新しいコピーを作成するが、ravelは可能ならビューを返すためメモリ効率が良い。

●help関数について

最も重要にして最も有用と言っても過言ではないhelp関数だが、使うには少々癖がある。help関数の使い方(各項目の1行目)に注目してください。

maxの場合
maxはPythonの組み込み関数(Python標準のbuilt-in functions)なので、


sortの場合
sortはリストオブジェクトのメソッド(Pythonのリスト型オブジェクトに対して直接呼び出すことができる関数)なので、


transposeの場合
transposeはNumPy配列のメソッド(numpy.ndarrayに対して直接呼び出すことができる関数)なので、

確認したい関数がどんなオブジェクトに対する関数なのかを意識して呼び出さないと確認ができないので注意したい。使いこなせればもはやこれだけでいいくらい無敵になれる…はず。

以下、ChatGPT大先生が教えてくださったので掲載。
まあ、都度調べればいいと思う。

Pythonリストオブジェクトのメソッド一覧

  • append()
  • extend()
  • insert()
  • remove()
  • pop()
  • clear()
  • index()
  • count()
  • sort()
  • reverse()
  • copy()

NumPy配列のメソッド一覧

  • T(転置プロパティ)
  • transpose()
  • flatten()
  • ravel()
  • reshape()
  • resize()
  • astype()
  • copy()
  • view()
  • fill()
  • sum()
  • prod()
  • mean()
  • std()
  • var()
  • min()
  • max()
  • argmin()
  • argmax()
  • cumsum()
  • cumprod()
  • sort()
  • argsort()
  • searchsorted()
  • clip()
  • repeat()
  • choose()
  • nonzero()
  • where()
  • take()
  • compress()
  • diagonal()
  • trace()
  • dot()
  • matmul()
  • conj()
  • real()
  • imag()
  • transpose()
  • trace()
  • mean()
  • std()
  • var()

MeanSquareErrorについて

User Guideに言及があったので調べてみた。
Mean Square Error (MSE) は、回帰モデルの予測性能を評価するための指標で、scikit-learnにもライブラリがあったので使ってみた。

これをUser Guideにある通りにNumPyのみでやってみると下記の通り。

もちろん答えは同じ。この程度だと記述に関しては特に変わりがないが、やっぱりライブラリとして使えた方が便利だと思う一方で、自分で書いてみると何をしているのかよく理解できるからこのくらいなら自分で手を動かすのもいいかなと思った。

●NumPy配列を保存する

こちらも要点のみ。
np.savetxt, np.loadtxtは配列をテキストデータで扱う。
np.save, np.loadはdata, shape, dtype等の情報を保持したNumPyバイナリ形式(.npy)で扱う。
np.savezはzipファイルのように複数の配列を1つのデータとして保存でき、拡張子は.npzになる。

使い方はこんな感じ。

np.genfromtxtはテキストデータに欠損値や数値以外のデータ型がある場合に有効で、コメントアウトも回避する他、データ型の自動推定や任意に指定することもできる。



■おわりに

とりあえずNumPy v2.1のユーザーガイドは一通り目を通して全て理解できました。「Pythonではじめる機械学習」にはこの後、SciPy, matplotlib, pandasと紹介が続いていくのですが、SciPyがちょっと重そう(雰囲気的に?)なので、明日はpandasから理解していこうかなと思っています。そもそも著者の勧めに従ってSciPy Lecture Notesに手をつけないで、勝手にNumPyユーザーガイドから始めたのでもう順番とかいいかなって…笑



■参考文献

  1. NumPy user guide – NumPy v2.1 Manual. numpy.org. 2024.
    https://numpy.org/doc/2.1/user/index.html
  2. ChatGPT. 4o mini. OpenAI. 2024.
    https://chatgpt.com/

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です