【numpyの基礎】ベクトルの生成、逆順、転置(行と列の入れ替え)

こんにちは、unogram管理人のうのちゅ〜です。

今回から、【numpyの基礎】シリーズとして、Pythonの数値計算用拡張モジュールnumpyの基礎について学んでいきます。

今回はその中でも、ベクトルの生成、逆順、転置(行と列の入れ替え)について解説していきます。

numpyで行列演算を行う場合、Pythonのリストではなく、ndarray(N-dimensional array)という多次元配列を扱うためのクラスを使用します。まずはベクトルとしての扱い方を学んでndarrayに親しんでいきましょう。

【numpyの基礎】では100 numpy exercisesを参考に、コメント等を加筆して初心者の方にもわかりやすく説明していきます。

それでは見ていきましょう!



【numpyの基礎】ベクトルの生成、逆順、転置(行と列の入れ替え)

ベクトルの生成

numpyをインポートし、要素が全て0のベクトルを生成します。

import numpy as np

a = np.zeros(10)
print(a)
# [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]

代入

5番目の要素に1を代入します。ベクトル内の要素は0からカウントされるので、5番目の場合は”4″を参照する点に注意しましょう。

a[4]=1
print(a)
# [0. 0. 0. 0. 1. 0. 0. 0. 0. 0.]

連続する数値をもつベクトルの生成 np.arange

[1,2,3,4,5]のように、連続する数値を要素にもつベクトルを生成したい場合は、np.arange(start,stop)を使用します。

[1,2,3,4,5]を生成したい場合はstart=1, stop=6(5ではない点に注意)とします。

b=np.arange(1,6)
print(b)
# [1 2 3 4 5]

ベクトルを逆順にする

例えば、[1,2,3,4,5]→[5,4,3,2,1]としたい場合、以下のように[::-1]とします。これは、「ベクトルのstartからstopまでを-1ずつ指定する」という意味になります。

c=b[::-1]
print(c)
# [5 4 3 2 1]



配列の形状を確認 shape

配列名.shapeで配列の形状を確認できます。

d=np.arange(9)
print(d)
# [0 1 2 3 4 5 6 7 8]
print(d.shape)
# (9,)

配列の形状を変更 reshape

配列の形状を変更したい場合、配列名.reshape(変更したいshape)とします。

例えば、要素数9のベクトルを3×3の二次元行列に変更する場合などに使用します。このとき、要素数が変更前後で一致していないとエラーとなります。

e=d.reshape(3,3) # dは要素数9のベクトル
print(e)
#[[0 1 2]
# [3 4 5]
# [6 7 8]]
print(e.shape)
# (3,3)

ベクトルの転置

2次元配列の転置は、配列名.Tで行います。

f=e.T
print(f)
# [[0 3 6]
#  [1 4 7]
#  [2 5 8]]
print(f.shape)
# (3,3)

一方、1次元ベクトルの転置には注意が必要です。

そもそも、ndarrayの1次元配列には行・列の区別はないため、配列名.Tによって配列のshapeは変わりません。つまり、行ベクトルの転置によって単純に列ベクトルを生成できないのです。

g=d.T
print(g)
# [0 1 2 3 4 5 6 7 8] #d.shapeから変化しない
print(g.shape) 
# (9,) #d.shapeから変化しない

よって、転置したい場合、ベクトルであっても2次元配列に変換する必要があります。

h=d.reshape(1,-1) # 行ベクトル
print(h)
# [[0 1 2 3 4 5 6 7 8]]
print(h.shape)
# (1, 9)
i=d.reshape(-1,1) # 列ベクトル
print(i)
# [[0]
# [1]
# [2]
# [3]
# [4]
# [5]
# [6]
# [7]
# [8]]
print(i.shape)
# (9, 1)

2次元配列と同様にしてベクトルを生成することで、ndarray形式でも行/列ベクトルのように扱えるため、転置することができます。

print(h.T) #行→列
# [[0]
# [1]
# [2]
# [3]
# [4]
# [5]
# [6]
# [7]
# [8]]
print(i.T) #列→行
# [[0 1 2 3 4 5 6 7 8]]



まとめ

今回は、【numpyの基礎】シリーズとしてベクトルの生成、逆順、転置(行と列の入れ替え)について解説してきました。

特に1次元ベクトルの転置は間違えやすい点なので注意しましょう。

次回は2次元配列の扱いについて解説していきます。

参考書を使った学習に進んでみたい方は以下の書籍もおすすめなので、参考にしてみてください。