Pythonの数値計算ライブラリ numpy〜リスト作成と四則演算、そして行列の入れ替え〜

スポンサーリンク

数値計算ライブラリ numpyとは?

numpyはPythonで数値を扱う時に非常に役に立つライブラリです。

何が役に立つかと言うと、ある数字をリスト内の数字全てに対して計算したり、2つのリスト同士の計算が出来たり。

さらには前回紹介したrangeと同様の関数があり、numpyでは少数の連番を作れるといった利点があります。

Pythonで連番のリスト作成 range関数〜飛び飛びの連番も作れるよ!〜
連番のリスト作成の関数 range今回は連番のリストを作るための関数 range に関しての解説です。まずはどういうものかというと、0から9までの整数のリストを作りたい時、関数を使わずにやろうとすると、こうなります。...

今回はnumpyの基本編ということで、この少数の連番に関しては割愛しますが、そのうちに紹介したいなと思っています。

扱う数値の数が少なければ、これまでのスタンダードなリストや四則演算で計算していけるのでしょうが、数が多くなればなるほど、数値計算に特化したライブラリであるnumpyは力を発揮してくれることでしょう。

Pythonのリスト(配列)の基本〜プログラミング初心者はまずはこれだけ〜
リストとは?今回はリストとか配列と呼ばれる仕組みに関して解説します。前に変数に関して、説明しました。その時、変数名と変数は一対一の関係でした。list1 = "Hello World"print(...
Pythonのデータ型(str、int、float)と四則演算
Pythonの覚えておきたいデータ型出力する関数print、リスト、繰り返し関数for、条件分岐の関数ifを解説したところで、そろそろ「データ型」に関しても説明したいと思います。こういった関...

同様のことが他のライブラリにも言え、通常はスタンダードなライブラリ・関数を使い、特別な処理をする際は、特化したライブラリを用いるため、どんなライブラリがあるのか知っておくことは今後のプログラミングに役に立ってくれることでしょう。

スポンサーリンク

インポートして、numpyのリストを作ってみる

numpyはAnacondaをインストールした人は最初からインストールされています。

ただ使用するにはインポートが必要です。

import numpy as np

このコードにより、numpyのインポートが完了しますが、「as np」とあるように、今後は「np」と打つことで、「numpy」と打ったのと同じ効果が得られます。

numpyは慣例的に「np」とされるので、それに倣っておいた方がいいでしょう。

次にnumpyのリストを作ってみますが、まずは通常のリストから。

a = [1, 2, 3, 4, 5]

print(a)

実行結果
[1, 2, 3, 4, 5]

numpuのリストを作るのは、これに少々プラスするだけです。

import numpy as np

a = np.array([1, 2, 3, 4, 5])

print(a)

実行結果
[1 2 3 4 5]

numpyのリストにしたいリストをnp.array()で囲うだけでnumpyのリストに変換されます。

ちなみにnumpyのリストを通常のリストに変換する場合は、.tolist()を最後に付けます。

import numpy as np

a = np.array([1, 2, 3, 4, 5])
b = a.tolist()

print(b)

実行結果
[1, 2, 3, 4, 5]
スポンサーリンク

リスト内の数値に対して、ある値を四則演算

例えばリストの中の数字全てに同じ数字を掛けたいということがあったとします。

通常のリストですと、これをやるのは少々手間が掛かります。

配列に掛け算すればいいんだろうと下のようなコードを書くと、意図しないリストが出来上がります。

a = [1, 2, 3, 4, 5]
b = a*2

print(b)

実行結果
[1, 2, 3, 4, 5, 1, 2, 3, 4, 5]

普通のリストでは、同じリストを掛けた数の分だけ、繰り返されてしまいます。

今回意図しているものは、[1, 2, 3, 4, 5]という最初のリストに対して、[2, 4, 6, 8, 10]というように、リスト内の要素全てに同じ数が掛けられたリストです。

もしnumpyを使わずにこれを達成しようとすると、私ならこんなコードを書きます。

a = [1, 2, 3, 4, 5]
b = []

for i in a:
    b.append(i*2)

print(a)
print(b)

実行結果
[1, 2, 3, 4, 5]
[2, 4, 6, 8, 10]

実行結果の上の段が2をかける前のリスト、下の段が2がかけられたリストになります。

まず b という空リストを用意して、その後、a から1つずつ要素を取り出し、2倍した数を b のリストに放り込んでいくと言う感じです。

これをnumpyを使うとこんなコードになります。

import numpy as np

a = np.array([1, 2, 3, 4, 5])
b = a*2

print(a)
print(b)

実行結果
[1 2 3 4 5]
[ 2  4  6  8 10]

通常のリストでは使えなかった、リストへ直接的に計算することが可能になるわけです。

これは掛け算だけではなく、四則演算全てが使えます。

import numpy as np

a = np.array([1, 2, 3, 4, 5])
b = a + 2
c = a - 2
d = a * 2
e = a / 2

print(a)
print(b)
print(c)
print(d)
print(e)

実行結果
[1 2 3 4 5]
[3 4 5 6 7]
[-1  0  1  2  3]
[ 2  4  6  8 10]
[0.5 1.  1.5 2.  2.5]
スポンサーリンク

リスト同士を四則演算

さらにnumpyではリスト同士を計算することも可能です。

つまり2つのnumpyリストがあった場合、要素数が同じであれば、それぞれの要素を足したり、掛けたりできるわけです。

import numpy as np

a = np.array([1, 2, 3, 4, 5])
b = np.array([2, 3, 4, 5, 6])

c = a + b
d = a - b
e = a + b
f = a / b

print(c)
print(d)
print(e)
print(f)

実行結果
[ 3  5  7  9 11]
[-1 -1 -1 -1 -1]
[ 3  5  7  9 11]
[0.5        0.66666667 0.75       0.8        0.83333333]

ただし先ほども書いた通り、2つのnumpyリストの要素数が同じ場合に限ります。

異なる場合は、エラーが出力されます。

import numpy as np

a = np.array([1, 2, 3, 4, 5])
b = np.array([2, 3, 4, 5])

c = a + b
d = a - b
e = a + b
f = a / b

print(c)
print(d)
print(e)
print(f)

実行結果
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-XX-XXXXXXXXXXXX> in <module>
      4 b = np.array([2, 3, 4, 5])
      5 
----> 6 c = a + b
      7 d = a - b
      8 e = a + b

ValueError: operands could not be broadcast together with shapes (5,) (4,) 
スポンサーリンク

2次元リストの行と列を入れ替える

numpyで2次元リストを作ると、表のように出力されます。

import numpy as np

a = np.array([[1, 2], [3, 4], [5, 6]])

print(a)

実行結果
[[1 2]
 [3 4]
 [5 6]]

この行と列を入れ替えたい時、役に立つ関数がtransposeです。

tabulateを紹介した時に、ちょこっとだけ紹介しました。

Pythonでテーブル表示 tabulate 〜インストールと基本的な使い方〜
Pythonでデータを表示する際の困りごとPythonでデータを扱いだすと困ることとして、データの表示形式があります。例えば、時間と気温をデータ化したとします(値は適当です)。とりあえず辞書に格納し、表示させた例が...

とりあえず使ってみるとこんな感じになります。

import numpy as np

a = np.array([[1, 2], [3, 4], [5, 6]])
b = a.transpose()

print(b)    

実行結果
[[1 3 5]
 [2 4 6]]

transpose関数を使うと、上の例のように、それぞれのリストの1番目の要素を取り新たなリストを、さらに2番目の要素を取り新たなリストを作成し、結果、行と列が入れ替わったリストを作ることが出来ます。

ちなみに最初から行と列を入れ替えたいなら、こんな書き方でも大丈夫です。

import numpy as np

a = np.array([[1, 2], [3, 4], [5, 6]]).transpose()

print(a)  

実行結果
[[1 3 5]
 [2 4 6]]

もしくは表示する時だけ、行と列を入れ替えたい場合は、こうしてもOK。

import numpy as np

a = np.array([[1, 2], [3, 4], [5, 6]])

print(a.transpose()) 

実行結果
[[1 3 5]
 [2 4 6]]

ちなみに行と列の数が揃っていないと、エラーは出ないものの、正しく行と列の入れ替えが行われないようです。

import numpy as np

a = np.array([[1, 2], [3, 4], [5]])
b = a.transpose()

print(b) 

実行結果
[list([1, 2]) list([3, 4]) list([5])]

1次元や3次元のリストでも使えるようですが、使うのは2次元リストだと思うので、とりあえずtranspose関数はこんな感じで。

またnumpyは数値を扱う人は多分、よくお世話になるライブラリでしょう。

何となく難しそうだなぁと思いつつ、使えるところは積極的に使っていくのがオススメです。

次回はグラフ表示に用いるライブラリ、matplotlibに関して解説をしていきます。

Pythonでグラフ表示 matplotlib 〜折れ線グラフ、マジックコマンド、表示範囲の制限〜
グラフ描写ライブラリmatplotlibとは?これまで文字や数字をどうやって扱うかを解説してきました。そろそろ文字や数字だけの出力は飽きてきたのではないでしょうか?やっぱり数字を扱い始めたら、やりたくなるのが、グラ...

ということで今回はこんな感じで。

コメント

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