しろちゃのプログラミング日記

プログラミング初心者が勉強したことを書き留めるブログ

Pythonモジュール・ライブラリ!NumPy編1(計算の準備)

はじめに

この記事は、PythonのライブラリNumPyの

基礎的な情報を紹介するNumPy編シリーズの最初の記事です


概要や導入を含め、NumPyを使った計算を行うための前段階までを紹介します


なお、この先NumPyはNumpyと表記していきたいと思います

Shiftキーを押すのがめんどくさくて…


なお、この記事は結構なげーので

目的の場所がある場合は目次から飛ぶことをおすすめします


Numpyについて

NumpyはPythonの外部ライブラリです

NumPyは、プログラミング言語Pythonにおいて数値計算を効率的に行うための拡張モジュールである。効率的な数値計算を行うための型付きの多次元配列(例えばベクトルや行列などを表現できる)のサポートをPythonに加えるとともに、それらを操作するための大規模な高水準の数学関数ライブラリを提供する。
引用元:NumPy - Wikipedia

我らが百科事典様によればこんな感じ。

要するに、たくさんの計算式の関数がセットになって入ってるってことですね

Numpyを使えば、高校数学のつまずきポイント三角関数を始めとし、

たくさんの計算式が扱えるようになります


また、機械学習など大量のデータを処理するときにも使われます

すごく処理が速いらしいです


Numpyの有効化

他のモジュールと同じように、

例の「import」でライブラリを読み込んでから使用します


なおNumpyは省略され「np」と読み込まれることが多く、

そちらの方が後々便利です


そのため読み込みの際は下記のように入力するのがおすすめです

import numpy as np

今後は上記のコマンドにて読み込んだ前提で紹介していきます


もしnpが気に入らなければ

「hp」でも「mp」でも好きなように読み込んでください

もちろん略さなくてもオーケーです


その場合は「np」と表記されている部分を

読み込んだ名前だと思ってください


Numpyチュートリアル

Numpyのチュートリアルみたいなものです


高度で専門的な科学的算術ができるとっても賢いNumpyですが、

高度で専門的な算術は高校生のしろちゃには理解できないので簡単なものを紹介します


この先の記事の作成においては、以下のサイトを参考にしました

Quickstart tutorial — NumPy v1.18.dev0 Manual


Numpyの扱うデータ型「ndarray」


Numpyの元となる機能は、

リスト型っぽいデータ型を用いて算術的な処理を行うことです

このリスト型っぽいデータ型のことを、「ndarray」と呼ぶそうです


しかし・・・

んだらーぁいぃ…?

英語嫌いの高校生しろちゃにはさっぱり読み方が分かりません(´;ω;`)ウッ…

そしてスペルが覚えられない!


というわけで、今後は

データ型は「npリスト型

リストっぽいものは「npリスト」とします


公式サイドからしてみればタプル型だそうですが、

「np関数で更新できるリスト」という意味で名付けました


いずれにせよ、この「npリスト型」は

Python標準装備の「リスト型」とは異なることに注意してください


npリストを作成する関数

基本の関数「array」

「array」はnpリストを

そのまんま作ってくれます

試行すると以下のようになります

>>>import numpy as np
>>>num = np.array([0,1,2,99])
>>>print(num)
[ 0  1  2 99]

上記のように、限りな~くリスト型っぽいnpリストが作成できました

この際、「(0, 1, 2, 99)」としないように気をつけてください

[ ]←コレが必要です

ちなみにこのデータ型を「type」関数で調べると

以下のようになります

>>>print(type(num))
<class 'numpy.ndarray'>


二次配列等も作れます

作り方は以下の通り

>>>num2 = np.array([(1, 2, 3),(4, 5, 6)])
>>>print(num2)
[[1 2 3]
 [4 5 6]]

こんな感じです

もっと繋げれば、繋げただけ作れます


ゼロでいっぱいのnpリストを作成する「zeros」

某ニュース番組みたいな関数です

使い方は下記の通り

>>>zero1 = np.zeros((4, 3))
>>>print(zero1)
[[0. 0. 0.]
 [0. 0. 0.]
 [0. 0. 0.]
 [0. 0. 0.]]

なお、このゼロたちのデータ型は

デフォルトで「float64」となっています

おしりに「.」が付いているのはそういう理由です


等差数列のnpリストを公差から作成!「arange」

さて、等差数列というのは何を意味するのかと言いますと

隣り合った数字の差が常に一定である数列のことです

例えば、偶数の数列とかですね

それを一発で作ってくれる賢い関数を紹介します

>>> tousa = np.arange(5, 20, 2)
>>> print(tousa)
[ 5  7  9 11 13 15 17 19]

上記コマンドの意味は、

「5から20までの数字を使って2ずつ増える数列を作って」

という意味です


等差数列の数学用語を使って説明すると

「初項5、公差2、末項20未満の数列を作って」

という感じ


初項、公差にあたる部分は省略することも可能です

省略した場合、初項は0、公差は1となります


なお、それぞれマイナスにしたり小数にしたりもできます

>>> tousa2 = np.arange(10, 9, -0.1)
>>> print(tousa2)
[10.   9.9  9.8  9.7  9.6  9.5  9.4  9.3  9.2  9.1]

「10から9までの数字を使って-0.1ずつ増える数列」です

なお、この際「10」と「9」を逆に入力すると

作成されるnpリストは空になってしまうので注意して下さい



*** 等差数列のnpリストを要素の数から作成!「linspace」

「arange」では要素と要素の差を指定することでnpリストを作成しましたが、

これでは何個の要素がnpリスト内にあるのか分かりません

そこで、公差よりも項数が大事な時はこの関数を使用しましょう

>|python|
>>> tousa3 = np.linspace( 0, 2, 9 )
>>> print(tousa3)
[0.   0.25 0.5  0.75 1.   1.25 1.5  1.75 2.  ]

使い方は上記の通り

公差は「0.5」となっているようですね


要素を乱数にして作成する「random」
  • random.random

どこかで見たことがあるような関数ですね

0~1の範囲で乱数を作成し、

npリストの中にぶち込みます

なんだかどこかで聞いたことがあるような…

>>> r = np.random.random(3)
>>> print(r)
[0.14557564 0.61724235 0.58665896]

そしてどこかで見たことがあるような出力結果ですね!


  • random.randint

あくまで私の予想なんですが、

たぶんrandomシリーズは全部使えるんじゃないかな…


そんな思いを抱えながら試しにやってみると

>>> r = np.random.randint(1, 10, 4)
>>> print(r)
[5 1 4 6]

やっぱりか!!


ということで「random.randint」はint型、

つまり整数の乱数をぶち込みます


例のコマンドだと、

「1以上10未満の乱数を4つ」のnpリストが作成できます


Numpyのその他の基本データ

npリスト内の要素のデータ型に関するオブジェクト「dtype」

オブジェクトというのが何なのかは良く分かりませんが、

Google先生がそういうので

英語に関して無力な私は納得するしかありません


使い方は以下の通りです

>>>a = np.array([0, 2, 15])
>>>print(a.dtype)
int36

「変数ドットdtype」という形です

今変数「a」にはnpリストが代入されているので、

より正確に言えば「npリストドットdtype」ですね


(なお、int32というのは「32ビットのint型」の意です

こんな感じでデータ型の後に数字が来ることはよくあると思いますが、

特に記述がない場合無視しておーけーです)


この「dtype」を使えばnpリスト作成の際、

入れる要素のデータ型を指定してnpリストを作成することができます

以下のように記述してください

>>> b = np.array([1, 5, 3], dtype = str)
>>> print(b)
['1' '5' '3']

それぞれの要素に「''」がつきました

つまり、str型になったんですね


配列の次元を表す「shape」

これは各次元の配列のサイズを示します

以下のように記述します

>>> a = np.array([(0,1,2),(3,4,5)])
>>> print(a)
[[0 1 2]
 [3 4 5]]
>>> print(a.shape)
(2, 3)

どっちが行でどっちが列だか良く分かりませんが

(縦, 横)って感じです

サイズの指定「reshape」

「arange」等でnpリストを作成する際、

以下のように記述することで

指定サイズのnpリストを作成できます

>>> a = np.arange(18).reshape(6, 3)
>>> print(a)
[[ 0  1  2]
 [ 3  4  5]
 [ 6  7  8]
 [ 9 10 11]
 [12 13 14]
 [15 16 17]]

これで、縦6x横3のnpリストが作成できました!


まとめ

今回の記事では、Numpyの概要から

計算を行う上で必ず押さえておかなければならない項目を紹介しました


なかなか多くて大変ですね!

私も大変でした!!

さいごに

かなり長くなってしまいましたが

ここまで読んでくださった方、本当にありがとうございます!!


間違いなどあれば

ご報告いただければ幸いです


次回は、基本的な計算の仕方を紹介しようと思います!