こんにちは、DXCEL WAVEの運営者(@dxcelwave)です!
サマリー
- 本記事はPythonライブラリ「Numpy」の基本操作をまとめた記事です。
- Numpy操作でつまづいた際に逆引き辞書としてご活用ください。
目次
Numpyとは|Python計算処理ライブラリ
「NumPy」とは、プログラミング言語Pythonの計算処理ライブラリです。
NumPyを活用することでPythonでの科学計算を高速に処理できるようになります。特に、Numpyは計算処理が膨大なビッグデータや機械学習・AIにおけるデータ加工処理で必須のライブラリとして位置付けられています。
Numpyライブラリのインストール
Numpyを利用するには、以下のコマンドを実行し、事前にライブラリをインストールしておく必要があります。
pip install numpy
【実践】Numpy操作|配列(Array)の作成
Numpyで配列を作成する操作について以下言及します。
リストを配列変換
import numpy as np
# 処理
List = [1,2,3]
arr = np.array(List)
# 出力イメージ
# array([1, 2, 3])
多次元配列作成
import numpy as np
List1 = [1,2,3]
List2 = [4,5,6]
# 多次元配列
arr = np.array([List1, List2])
# 出力イメージ
# array([[1, 2, 3],
# [4, 5, 6]])
全要素が0の数値配列作成
import numpy as np
# 全ての要素が0の数値配列作成
np.zeros(10)
# 出力イメージ
# array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
全要素が0の数値配列作成(多次元)
import numpy as np
# 全ての要素が0の数値配列作成
np.zeros((5,5))
# 出力イメージ
# array([[0., 0., 0., 0., 0.],
# [0., 0., 0., 0., 0.],
# [0., 0., 0., 0., 0.],
# [0., 0., 0., 0., 0.],
# [0., 0., 0., 0., 0.]])
全要素が0の文字列配列作成
import numpy as np
# 全ての要素が0の文字列配列作成
np.zeros(10).astype("str")
# 出力イメージ
# array(['0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0','0.0'])
全要素が1の数値配列作成
import numpy as np
# 全ての要素が1の数値配列作成
np.ones(10)
# 出力イメージ
# array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])
空の配列作成
import numpy as np
# 空の配列
np.empty((5,4))
# 出力イメージ
# array([[0., 0., 0., 0.],
# [0., 0., 0., 0.],
# [0., 0., 0., 0.],
# [0., 0., 0., 0.],
# [0., 0., 0., 0.]])
単位行列作成
import numpy as np
# 単位行列
np.eye(7)
# 出力イメージ
# array([[1., 0., 0., 0., 0., 0., 0.],
# [0., 1., 0., 0., 0., 0., 0.],
# [0., 0., 1., 0., 0., 0., 0.],
# [0., 0., 0., 1., 0., 0., 0.],
# [0., 0., 0., 0., 1., 0., 0.],
# [0., 0., 0., 0., 0., 1., 0.],
# [0., 0., 0., 0., 0., 0., 1.]])
arange関数で配列作成
import numpy as np
# arange関数(開始値, 終値, 間隔値)
np.arange(0,100,5)
# 出力イメージ
# array([ 0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95])
【実践】Numpy操作|配列情報の取得
Numpyの配列情報を取得する方法について解説します。
配列のデータ型
import numpy as np
# 配列
arr = np.array([[1,2,3],[4,5,6]])
# データ型
arr.dtype
# 出力イメージ
# dtype('int64')
配列のサイズ
import numpy as np
# 配列
arr = np.array([[1,2,3],[4,5,6]])
# サイズ調査
arr.shape
# 出力イメージ
# (2, 3)
【実践】Numpy操作|添字
添字とは、配列に格納された個々の要素を指し示す値を指します。添字を指定することで目的の値を抽出できます。
一次元配列|特定の値抽出
import numpy as np
# 配列
arr = np.array([0,1,2,3,4,5,6,7,8,9])
# 指定の値を取得
arr[5]
# 出力イメージ
# 5
多次元配列|特定の行抽出
import numpy as np
# 2次元配列
arr = np.array(([1,2,3],[4,5,6],[7,8,9]))
# 値抽出
arr[1]
# 出力イメージ
# array([4, 5, 6])
多次元配列|特定の値抽出
import numpy as np
# 2次元配列
arr = np.array(([1,2,3],[4,5,6],[7,8,9]))
# 値抽出
arr[0][2]
# 出力イメージ
# 3
特定範囲の値抽出|スライス
import numpy as np
# 配列
arr = np.array([0,1,2,3,4,5,6,7,8,9])
# 指定の値を取得
arr[1:5]
# 出力イメージ
# array([1, 2, 3, 4])
特定範囲の値更新|スライス
import numpy as np
# 配列
arr = np.array([0,1,2,3,4,5,6,7,8,9])
# 特定の範囲の値更新
arr[1:5] = 999
# 出力イメージ
# array([ 0, 999, 999, 999, 999, 5, 6, 7, 8, 9])
全範囲の値更新|スライス
import numpy as np
# 配列
arr = np.array([0,1,2,3,4,5,6,7,8,9])
# 全範囲の値更新
arr[:] = 999
# 出力イメージ
# array([999, 999, 999, 999, 999, 999, 999, 999, 999, 999])
【実践】Numpy操作|配列の演算基礎
Numpy配列の演算方法について以下解説します。
足し算
import numpy as np
arr1 = np.array([0,1,2,3])
arr2 = np.array([4,5,6,7])
# 和
arr1 + arr2
# 出力イメージ
# array([ 4, 6, 8, 10])
引き算
import numpy as np
arr1 = np.array([0,1,2,3])
arr2 = np.array([4,5,6,7])
# 差
arr1 - arr2
# 出力イメージ
# rray([-4, -4, -4, -4])
掛け算
import numpy as np
arr1 = np.array([0,1,2,3])
arr2 = np.array([4,5,6,7])
# 積
arr1 * arr2
# 出力イメージ
# array([ 0, 5, 12, 21])
割り算
import numpy as np
arr1 = np.array([0,1,2,3])
arr2 = np.array([4,5,6,7])
# 商
arr1 / arr2
# 出力イメージ
# array([0 , 0.2 , 0.33333333, 0.42857143])
べき乗
import numpy as np
arr1 = np.array([0,1,2,3])
# 3乗
arr1 ** 3
# 出力イメージ
# array([ 0, 1, 8, 27])
行列の積
import numpy as np
arr1 = np.array([[0, 1, 2],
[1, 2, 3]])
arr2 = np.array([[3, 2],
[3, 2],
[3, 2]])
# 積
print(np.dot(arr1, arr2))
# 出力イメージ
[[ 9 6]
[18 12]]
行列の要素毎に計算
import numpy as np
a = np.array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
b = np.array([[0, 1, 2],
[2, 0, 1],
[1, 2, 0]])
# 出力
print(a * b)
# 出力イメージ
# [[ 0 1 4]
# [ 6 0 5]
# [ 6 14 0]]
平均
import numpy as np
x = np.array([50, 60, 70, 80])
# 平均
np.average(x)
# 出力イメージ
# 65
分散
import numpy as np
x = np.array([50, 60, 70, 80])
# 分散
np.var(x)
# 出力イメージ
# 125
標準偏差
import numpy as np
x = np.array([50, 60, 70, 80])
# 標準偏差
np.std(x)
# 出力イメージ
# 11.180339887498949
総和計算|シグマ
import numpy as np
a = np.array([2, 3, 4])
b = np.array([1, 2, 3])
# 総和
np.sum(a*b)
# 出力イメージ
# 20
ネイピア数e
import numpy as np
# ネイピア数e
x = 1
np.exp(x)
# 出力イメージ
# 2.718281828459045
自然対数log
import numpy as np
# 自然対数log
x = 2
np.log(x)
【実践】Numpy操作|行列の入れ替え
Numpyで作成した行列の基本操作について解説します。
行列の転置
import numpy as np
# 配列
arr = np.array([[1, 2, 3],
[4, 5, 6]
])
# 転置
print(a.T)
# 出力イメージ
# [[0 3 6]
# [1 4 7]
# [2 5 8]]
import numpy as np
# 配列
arr = np.array([[1, 2, 3],
[4, 5, 6]
])
# 転置(別解)
print(a.transpose())
# 出力イメージ
# [[0 3 6]
# [1 4 7]
# [2 5 8]]
行と列の入れ替え|transpose()
import numpy as np
# 配列
arr = np.array([[1, 2, 3],
[4, 5, 6]
])
# 行と列が入れ替え
arr.transpose((1,0))
# 出力イメージ
# array([[1, 4],
# [2, 5],
# [3, 6]])
行と列の入れ替え|swapaxes()
import numpy as np
# 配列
arr = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
])
# swapaxesで入れ替え指定
arr.swapaxes(0,1)
# 出力イメージ
# array([[1, 4, 7],
# [2, 5, 8],
# [3, 6, 9]])
多次元変換|reshape()
import numpy as np
# 1次元行列
arr = np.arange(12)
# 3次元変換
arr3 = arr.reshape(2,2,3)
# 出力イメージ (arr)
# array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
# 出力イメージ(arr3)
# array([[[ 0, 1, 2],
# [ 3, 4, 5]],
# [[ 6, 7, 8],
# [ 9, 10, 11]]])
【実践】Numpy操作|ファイル形式で保存
Numpyの配列をファイル形式で保存する方法について解説します。
配列の保存|.npyファイル
import numpy as np
# 配列
arr = np.array([1,2,3])
# 保存 (拡張子 .npy)
np.save('data',arr)
配列の読込|.npyファイル
import numpy as np
# 保存した配列読込
arr = np.load('data.npy')
arr
配列の保存|テキストファイル
import numpy as np
# 配列
arr = np.array([1,2,3])
# 保存(テキストファイル)
np.savetxt('text.txt',arr,delimiter=',')
配列の読込|テキストファイル
import numpy as np
# 保存した配列読込
arr = np.loadtxt('text.txt',delimiter = ',')
arr
複数配列の保存|zipファイル
import numpy as np
# 配列
arr1 = np.array([1,2,3])
arr2 = np.array([3,4,5])
#複数配列をzip形式で保存
np.savez('arr_zip.npz', # ファイル名
data1=arr1, # 配列1
data2=arr2 # 配列2
)
複数配列の読込|zipファイル
import numpy as np
# 配列読み込み
arr = np.load('arr_zip.npz')
# 配列を指定
arr1 = arr['data1']
arr2 = arr['data2']
【参考】Pythonでのデータ前処理・分析・可視化
当サイトではPythonを用いた「データ前処理手法」「データ分析」「グラフや表を用いた可視化」手法について幅広く解説しております。AI・機械学習にも応用できる内容となっておりますため、興味がある方は併せてご確認下さい。
Pythonを活用したデータ処理・分析手法一覧
【参考】Pythonとは・できること一覧
Pythonでできること・副業案件の探し方
「Pythonで実現できるお役立ち情報」を多数配信中!Python習熟者向けに「おすすめのPython副業・フリーランス案件の探し方」についてもご紹介してます。
最後に
お問い合わせフォーム
上記課題に向けてご気軽にご相談下さい。
お問い合わせはこちら