【Python】Numpy基本操作一覧|計算処理の効率化

こんにちは、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とは・できること一覧

最後に

この記事が気に入ったら
フォローしてね!

本記事をシェア!
目次