ここで学習すること
Numpyを用いた行列の作成やデータの抽出の仕方を学習します。
軸の並べ替えやコピーについても学習します。
Numpy行列では横のくくりを行、縦のくくりを列と呼びます。
list型のindex同様に行、列ともに0行目(列目)から始まります。
行列の型を表示する
import numpy as np
list= [[1, 2], [3, 4], [5, 6]]
arr = np.array(list)
.shapeで行列の型を表示できます。
print(arr.shape)
=>
(3, 2) #3行2列の行列であることを示しています。
行列から値を抽出する
リストと同様にスライス[最初の値: 最後+1の値: ステップ]を用いてインデックスを指定して値の抽出が可能です。
インデックスは0始まりです。スライスは[ ]でくくります。
import numpy as np
arr = [1, 2, 3, 4, 5, 6 ,7]
n = arr[4] #4番目の抽出
n2 = arr[1:3] #1番目から2番目の抽出
n3 = arr[: : 2] #1つ飛ばしで抽出
=>
5
[2, 3]
[1, 3, 5, 7]
多次元の行列から値を抽出する
list = [[1,2],[3,4],[5,6]]
arr = np.array(list)
print(arr)
print(arr[2,1])
=>
[[1 2]
[3 4]
[5 6]]
6
解説
print(arr[2, 1])ではまずprint(arr[2])が実行されます。
0次元軸(最も内側の[])のうち、インデックスが2(3番目)が抽出されます。
=>[5 6]
つぎに[1]が抽出されるのでprint(arr[2, 1])の結果は6となります。
2軸の行列の軸の入れ替え
list = [[1,2],[3,4],[5,6]]
arr = np.array(list)
print(arr)
=>
[[1 2]
[3 4]
[5 6]]
.Tで行と列を入れ替えます。
print(arr.T)
=>
[[1 3 5]
[2 4 6]]
3軸の行列の軸の入れ替え
list =[[[1,2],[3,4],[5,6]],[[11,22],[33,44],[55,66]]]
arr = np.array(list)
print(arr)
=>
[[[ 1 2]
[ 3 4]
[ 5 6]]
.transpose()で3軸の行列の軸の入れ替えが可能です。
arr2=arr.transpose()
print(arr2)
=>
[[11 22]
[33 44]
[55 66]]]
[[[ 1 11]
[ 3 33]
[ 5 55]]
[[ 2 22]
[ 4 44]
[ 6 66]]]
.transpose(2,1,0)では0軸を2軸へ、1軸を1軸へ、2軸を0軸へ入れ替えます。
arr3=arr.transpose(2,1,0)
print(arr3)
=>
[[[ 1 11]
[ 3 33]
[ 5 55]]
[[ 2 22]
[ 4 44]
[ 6 66]]]
行列をつくる
list = [1,2,3,4,5,6,7,8,9,10]
arr=np.array(list)
print(arr)
=>
[ 1 2 3 4 5 6 7 8 9 10]
.reshape(2,5)で2行5列の行列を作成します。
arr2=arr.reshape(2,5)
print(arr2)
=>
[[ 1 2 3 4 5]
[ 6 7 8 9 10]]
一つ目の引数を-1とすると行数は指定せず1列の配列が作れます。
arr3=arr.reshape(-1,1)
print(arr3)
=>
[[ 1]
[ 2]
[ 3]
[ 4]
[ 5]
[ 6]
[ 7]
[ 8]
[ 9]
[10]]
二つ目の引数を‐1とするとこのようになります。
何列になるかわからないけど、とにかく2行の行列を作ります。
arr4=arr.reshape(2,-1)
print(arr4)
[[ 1 2 3 4 5]
[ 6 7 8 9 10]]
行列をならべ変える
arr=np.array([4,2,1,5,8,3,5,8,9])
.sort()で小さい順に並べ変えます。
arr.sort()
print(arr)
sort()は返り値をもたないメソッドであるため、arrを直接書き換えます。
このような処理をip-place処理といいます。
in-place処理ではこのような処理ができません。
arr2=arr.sort()
print(arr2)
=>None
行列をコピーする
arr=np.array([4,2,1,5,8,3,5,8,9])
arr2=arr
arrを変更するとarr2も変わる
arr3=arr.copy()
arrを変更してもarr3は変わらない