【Python】Numpyの基礎【データサイエンス】

Programming
記事内に広告が含まれています。
スポンサーリンク

 

データ分析でPythonを使おうとしている.
Numpyの使い方を知りたい.
リストとの違いは何?

 そんな方が,Numpyの基本を学べる記事です.
 

本記事の内容

 

 Pythonは科学技術計算や機械学習などでよく使用されています.そのような領域で使用するデータは大規模なデータシーケンスから構成され,ベクトルや行列演算が多用されます.組み込みデータ型であるリストやタプルよりも高速に配列処理できます.本記事では,Numpyでの配列の作成方法,その後配列の操作方法などを解説します.これまでの記事と同様に,コードを打ちながら学んで行きましょう.余力のある方は,部分的にコードを変更して実験してみましょう.
 

 

Pythonの文法基礎から実務的な分析・機械学習まで学べるオンライン学習サービス(1週間無料です)

 

 

スポンサーリンク

Numpyとは|配列の作成方法

 数値計算を実行するためのライブラリです.多次元配列を効率的に扱うことができます.Python は実行の遅いプログラミング言語ですが,NumPyの内部ではC言語で実装されており,ベクトルや行列などの演算が高速で実行できます.
 Numpyでは,多次元配列を格納するための特別なオブジェクトnumpy.ndarrayを使用して計算します.ndarray(N-dimentional array = N次元配列)あるいは略してarrayと呼ばれます.Pythonのリストやタプルと異なり,個々の要素は同じでなければなりません.
 

 

Numpyの読み込み方

Numpyモジュールをインポートします.一般的な慣習として,npと短縮した別名でインポートすることが多いです.

import numpy as np
【Python初心者】モジュール【リスキリング】
Pythonを勉強するために本を買ったけど,積読,挫折していませんか?モジュールについて,解説しています.Pythonを学びたい方,学び直したい方は,ぜひご一読ください.

 

 

Numpyによる配列の作成

表1. Numpyの配列作成メソッド一覧

メソッド 機能
.array() リストからndarrayオブジェクトを作成
.arrange() 指定範囲の整数列を作成
.linspace() 範囲を等分割した値からなる配列を作成
.zeros() 全ての要素が0のみから成る配列を作成
.ones() 全ての要素が1のみから成る配列を作成
.full() 全ての要素が指定した値のみからなる配列を作成
.random() 0から1までの乱数の作成
.eye() 単位行列の作成
.reshape() 引数で指定された形(行数と列数)の多次元配列に変換

 

 

.array()

num_ex1 = np.array([-3, -2, 1, 0, 1, 2, 3])
num_ex1
array([-3, -2, 1, 0, 1, 2, 3])

 

num_ex2 = np.array(["砂糖", "塩", "酢", "醤油", "味噌"])
num_ex2
array([‘砂糖’, ‘塩’, ‘酢’, ‘醤油’, ‘味噌’])

 

num_ex3= np.array([3, "砂糖", "塩", "酢", "醤油", "味噌", 6.02e23])
num_ex3
array([‘3’, ‘砂糖’, ‘塩’, ‘酢’, ‘醤油’, ‘味噌’, ‘6.02e+23’])

 

多次元配列

xy = np.array([[1,2,3,],[4,5,6,]]) #2次元配列の構築 
xy
array([[1, 2, 3],
[4, 5, 6]])

 

xyz = np.array([[[1,2,3,],[4,5,6,],[7,8,9,]],[[10,11,12],[13,14,15],[16,17,18]]]) #3次元配列の構築 
xyz
array([[[ 1, 2, 3],
[ 4, 5, 6],
[ 7, 8, 9]],

[[10, 11, 12],
[13, 14, 15],
[16, 17, 18]]])

 3次元配列は行列の配列のように印字されます.
 

.arange()

np.arange(10)
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

 

np.arange(3.05, 3.14, 0.01) #.arange(開始値, 停止値, 間隔)
array([3.05, 3.06, 3.07, 3.08, 3.09, 3.1 , 3.11, 3.12, 3.13, 3.14])

 

.linspace()

np.linspace(3.05, 3.14, 10) #.linspace(開始値, 停止値, 分割数)
array([3.05, 3.06, 3.07, 3.08, 3.09, 3.1 , 3.11, 3.12, 3.13, 3.14])

 ちなみに,分割数を指定しなかった場合,デフォルトの要素数は50個です.
 

.zeros()

np.zeros(2) # 長さ2の1次元配列 
array([0., 0.])

 

 タプルで行数と列数を指定して,多次元にすることもできます.

np.zeros((2, 4)) # 2x4の2次元配列
array([[0., 0., 0., 0.],
[0., 0., 0., 0.]])

 

.ones()

np.ones(2)
array([1., 1.])

 

np.ones((2, 4))
array([[1., 1., 1., 1.],
[1., 1., 1., 1.]])

 

.full

np.full(2, 3) # .full(要素数, 数値)
array([3, 3])

 

.random()

np.random.rand(3) # 長さ3の1次元配列
array([0.88856749, 0.80352441, 0.46762618])

 

np.random.randn(2,4) # 2×4の2次元配列を生成
array([[ 1.94365206, -1.77655853, 1.5410745 , 0.31178774],
[ 2.34391266, 0.78987927, -0.05126123, -0.47948099]])

 

.eye()

np.eye(3)
array([[1., 0., 0.],
[0., 1., 0.],
[0., 0., 1.]])

 

リストとndarrayの違い

 各々の配列に2をかけてみます.リストを2回繰り返した要素を持つリストとなるが,ndarray配列では,ここの要素に2をかけた配列を得ることができます.

list_ex1=[-3, -2, 1, 0, 1, 2, 3]
list_ex1*2
[-3, -2, 1, 0, 1, 2, 3, -3, -2, 1, 0, 1, 2, 3]

 

num_ex1*2
array([-6, -4, 2, 0, 2, 4, 6])

 

.reshape()
 .reshape()による形状変更も,リストやタプルにはない機能です.

num_ex1.reshape(7,1) # 7行1列のベクトルに変換
array([[-3],
[-2],
[ 1],
[ 0],
[ 1],
[ 2],
[ 3]])

 

np.arange(10).reshape(2,5) # 2行5列の二次元配列に変換
array([[0, 1, 2, 3, 4],
[5, 6, 7, 8, 9]])

 

 

属性の確認

表2. Numpyのデータ属性を調べるメソッド一覧

メソッド 機能
.dtype() 配列のデータ型
.ndim() 配列の次元
.shape() 配列の形状
.size() 配列の要素数

 

 

.dtype()

np.arange(3.05, 3.14, 0.01).dtype
dtype(‘float64’)

 

xy.dtype
dtype(‘int64’)

 

一方で,これまで,データ型を調べるには,type()関数を使用してきました.
numpyで作成した配列のデータ型を調べると,numpy.ndarrayとなることを確認してみましょう.

type(np.arange(3.05, 3.14, 0.01))
numpy.ndarray

 

.ndim()

xy.ndim
2

 

xyz.ndim
3

 

.shape()

num_ex1.shape
(7,)

 

xy.shape
(2, 3)

2行3列なので,2と3のタプル.
 

xyz.shape
(2, 3, 3)

行列が2つ,各々の中に3行3列なので,2と3と3のタプル.
 

.size()

xy.size
6

 

xyz.size
18

 

 

スポンサーリンク

Numpyでの配列操作


 本記事では,よく使う配列操作として,下記2つの操作について解説します.

 

インデックスによる配列の取得

 一次元配列では,リストやタプルと同様に,「インデックス」を用いて要素を抽出したり,スライスしたりすることができます.ただし,二次元配列以上の多次元配列を操作する場合は,高次元(入れ子の外側)から順にインデックスをカンマで区切って指定する点が異なります.

【Python初心者】文字列とエスケープシーケンス【リスキリング】
Pythonの文字列の扱いについて解説します。ぜひ記事を読みながら、コードを書き、打ちこんだコード通りに、結果が出力されるのを体感してください。Pythonを学びたい方、学び直したい方は、ぜひご一読ください。
【Python初心者】リスト【リスキリング】
Pythonを勉強するために本を買ったけど,積読,挫折していませんか?リストの操作について,基本から分かりやすく解説しています.Pythonを学びたい方、学び直したい方、より深く学びたい方は,ぜひご一読ください.

 

一次元配列のインデックス

num_ex1 = np.array([-3, -2, 1, 0, 1, 2, 3])
num_ex1[0]
np.int64(-3)

 

二次元配列以上のインデックス

xy = np.array([[1,2,3,],[4,5,6,]])
xy[1] # 行のインデックスのみ指定
array([4, 5, 6])
xy[1,0] # 行と列のインデックスをまとめて指定
np.int64(4)

 

xyz = np.array([[[1,2,3,],[4,5,6,],[7,8,9,]],[[10,11,12],[13,14,15],[16,17,18]]]) 
xyz[1,0] # 三次元の行列と行のインデックスをまとめて指定
array([10, 11, 12])

 

xyz[1,0,1] # 三次元の行列と行と列のインデックスをまとめて指定
np.int64(11)

 

一次元配列のスライス

num_ex1[:]
array([-3, -2, 1, 0, 1, 2, 3])

 

num_ex1[2:4]
array([1, 0])

 

num_ex1[0:5:2]
array([-3, 1, 1])

 

二次元配列以上のスライス

xy[:] # 配列の全要素
array([[1, 2, 3],
[4, 5, 6]])

 

xy[0:,1:] # 行と列の開始値のインデックスを指定
array([[2, 3],
[5, 6]])

 

xyz[:] # 配列の全要素
array([[[ 1, 2, 3],
[ 4, 5, 6],
[ 7, 8, 9]],

[[10, 11, 12],
[13, 14, 15],
[16, 17, 18]]])

 

xyz[1:,0:2] # 三次元の行列と二次元の行列の開始値:停止値のインデックスをまとめて指定
array([[[10, 11, 12],
[13, 14, 15]]])

 

 

算術演算

 前述のリストとndarrayの違いで述べたように,ndarrayはリストと異なり,配列とスカラとの算術演算を記述すると、要素毎のスカラ演算となります.高校数学で習う「行列」の計算です.配列に対して,スカラの加減乗除,整数除算,剰余,べき乗は,要素ごとに演算され,新しい配列が戻ってきます.

num_ex4 = np.arange(10).reshape(2,5)
num_ex4 +1
array([[ 1, 2, 3, 4, 5],
[ 6, 7, 8, 9, 10]])

 

num_ex5 = num_ex4 + 1
num_ex5 ** num_ex5
array([[ 1, 4, 27, 256, 3125],
[ 46656, 823543, 16777216, 387420489, 10000000000]])

 

Numpyについて,基本を学べましたでしょうか?
次はMatplotlibというライブラリの使い方について学びましょう!

最後まで読んでくださり,ありがとうございます☺️

 

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