PR

pythonのListの操作にはnumpyが相性バツグン

python-numpy-eyecatch

pythonをやっていると、Listの操作は避けては通れないですよね。

Listは以前の記事でなんとなくわかってもらえたと思いますが、

今回は、もう少しListの操作を詳しく解説していきます。

Listと相性が抜群なのがnumpyというライブラリです。

このnumpyですが、pythonを使う人ならだれでも知っているくらい

有名なライブラリです。

それではnumpyをどうやって使うのか、どれだけ便利なのか

早速見ていきましょう。

この記事を読むことでわかること

自己紹介

東証一部上場企業でサラリーマンしてます。

主に工場(生産現場)で使用する検査装置のアプリケーション開発してます。

ヒトの作業を自動化して簡略化するアプリケーションを日々開発中。

2022年5月に転職。現役バリバリの技術者です。
現在は超大手企業の新規事業分野で装置の研究・開発をしています。

Youtubeチャンネルにさまざまな動画を上げています

↓↓↓こちらからYoutubeチャンネルにアクセス!! ↓↓↓

今までのpythonの記事はこちらにまとまっています。↓↓↓

Python
「Python」の記事一覧です。

numpyをpythonで使えるようにする方法について。

numpyはライブラリですので、

まずはpythonを使える環境でpipをする必要があります。

例えば、VSCodeを使用している場合はターミナルですね、

そこに

pip install numpy

このように打ち込んでEnterキーを押すと勝手にダウンロードと

インストールが始まります。※インターネット環境必須。

pip が終わったら、正しくインストールされているかの確認のために、

pip list

コンソール上で打ち込んでEnterキーを押しましょう。

すると、今現在、pythonで使えるライブラリとそのVer.の一覧が表示されます。

その中にnumpyが入っていれば準備完了です。

Listをnumpyを使って操作してみる。

それでは早速pythonでnumpyを使ってみましょう。

ソースコード上でnumpyを使えるようにする方法は、この一文を入れたら終わりです。

import numpy as np

numpyを、npという名前で【インポート(読み込み)】する。という文になります。

かならずソースコードの最初に記述しておくことを忘れないように。

それでは試しにnumpyを使ってListを作成してみましょう。

import numpy as np

b=np.array([2,3,4]) # numpyを使用して作成したList。

今回は【bというListをnumpyで作成】してみました。

通常のListを作る行程と比べてみましょう。

import numpy as np

a=[2,3,4]# 基本機能でListを作成したa
b=np.array([2,3,4]) # numpyを使用して作成したList。

aが基本機能、つまりnumpyなしで作成したListです。

ちょっとここで気づきますが、

「なんだよ、めんどくさくなってるじゃないか…」と。

ただですね、ここから紹介する便利機能を見ればそんなデメリットは些細なことだとわかります。

標準のListとの操作性の違いについて。

いくつか通常のListとnumpyで操作性が異なるところがあります。

それがnumpyのメリットにもつながっています。

numpyだとこんなことも可能です。

  • 配列のまま計算が可能。
  • ベクトルの内積などの処理が簡単。
  • 任意の大きさの配列を、要素を入れた状態で作成可能。
  • 配列の大きさ変更が簡単。

こんな感じでメリットがたくさんあります。

一つずつ紹介していきます。

配列のまま計算が可能。

これは、配列の中身を処理するときのメリットです。

例えば、こんな配列があったとします。

[2,3,4]

そこでこの配列の要素すべてに1足したくなった場合どうしましょうか?

通常のListであれば、各要素に1ずつ足していくことになりますよね。

# Listの中身すべて1ずつ足したいとき。
a=[2,3,4]# 基本機能でListを作成したa

aaa=[]
for paramA in a:
    aaa.append(paramA+1)
print(aaa)

このような流れで処理すれば、aaaは出力結果として、

[3, 4, 5] 

こうなります。

ではnumpyでやるとどうなるかというと….

import numpy as np

b=np.array([2,3,4]) # numpyを使用して作成したList。

bb=b+1
print(bb)

以上です。これで出力は[3 4 5]となります。

numpyだと配列にそのまま足すだけですべての要素に足してくれるんです。

便利ですよね。

ほかにも、配列同士の計算もとっても簡単にできます。

配列を2つ用意して四則演算してみましょう。

import numpy as np

b=np.array([2,3,4]) # numpyを使用して作成したList。
c=np.array([2,5,9])

d=b+c
print(d)

例として足し算を紹介しましたが、たった1行で、各要素の足し算が可能です。

もちろん出力結果は、[4 8 13]

となります。

ベクトルの内積などの処理が簡単。

続きまして、ベクトルの内積など、計算処理のお話ですね。

例えば、一例として次のような配列があったとします。

x=np.array([1,5])
y=np.array([2,3])

xとyの内積は?と言われたらどのような計算でしょうか?

答えは、1×2+5×3=17

ですよね?

この内積、計算としては仕組みが単純ですが、

わざわざfor文を使ってやるほどでもないよな…なんて思いますよね。

そんなときは便利なnumpyの機能があります。

それが、dotというものです。実際に使ってみましょう。

import numpy as np
x=np.array([1,5]) # numpyを使用して作成したList。
y=np.array([2,3])

b1=np.dot(x,y)
print(b1)

これで出力結果は17となり、きちんと内積の計算ができているのがわかります。

もちろん、3要素ある配列でもこのdotは使えます。

任意の大きさの配列を、要素を入れた状態で作成可能。

これくらいの大きさの配列をとりあえず作りたいな…と思うことあると思います。

ただ、最初は値はどうでもいいから大きさだけ指定したいな。

そんなときはnumpyのarangeという関数を使うととっても楽です。

実際に使ってみるとこんな感じです。

import numpy as np
z=np.arange(12)
print(z)

出力結果としては↓のように0~11で計12個の要素が入った配列が作成できました。

[ 0  1  2  3  4  5  6  7  8  9 10 11]

ほかに、0と1のみになってしまいますが、値を指定して作成することも可能です。

0も1もどちらも紹介します。

import numpy as np
zeroList=np.zeros(12)#0が12個入った配列
oneList=np.ones(12)#1が12個入った配列
print(zeroList)
print(oneList)

出力結果としてはこんな感じで、0と1が入っていることがわかりますね。

[0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]

配列の大きさの変更が簡単。

配列の大きさを変更したいときにもこのnumpyは大活躍します。

本来であれば、配列の大きさを変えたいと思ったら、

今配列に入っている要素を一つずつ抜き出して新たな配列に格納していくと思いますが、

numpyであれば一行で完了します。使用する関数はreshapeという関数です。

先ほど0や1で大きさだけ決めて作成した配列があるので、

そちらの配列の大きさを変更していきましょう。

0が入った配列は3×4の配列、

1が入った配列は4×3の配列にしてみます。

具体的にはこんな感じです。

import numpy as np
zeroList=np.zeros(12)
oneList=np.ones(12)

zeroListReshape=zeroList.reshape(3,4)
oneListReshape=oneList.reshape(4,3)

print(zeroListReshape)
print(oneListReshape)

出力結果は順にこちらです。↓

[[0. 0. 0. 0.]
 [0. 0. 0. 0.]
 [0. 0. 0. 0.]]
[[1. 1. 1.]
 [1. 1. 1.]
 [1. 1. 1.]
 [1. 1. 1.]]

ちゃんと指定した配列の大きさに代わっていますね。

ちなみに….

要素数が今回は12ですが、例えばreshapeで5×5なんてしたらどうなるでしょうか?

実際にやってみましょう。

import numpy as np
zeroList=np.zeros(12)
oneList=np.ones(12)

zeroListReshape=zeroList.reshape(5,5)

結果はこちら↓↓

例外が発生しました: ValueError
cannot reshape array of size 12 into shape (5,5)

当たり前ですが、要素数が12に対して、5×5つまり25要素必要な配列に置き換えることはできないので

このようにエラーが発生するという感じですね。

今回のまとめ。

今回は配列の操作に使える便利なツール、

numpyについてご紹介してきました。

Listでももちろんfor文なんかで回せばどれも実現可能な内容ですが、

簡単に計算、簡単に配列作成。

これがnumpyの大きなメリットですね。

実際統計やら、機械学習、画像処理周りで活躍している方は必須のツールのようです。

この機会にnumpyに触れてみるのもいかがでしょうか?

コメント

タイトルとURLをコピーしました