Numpyのアレコレ

NumPyとは

  • Numerical Pythonの略称
  • 科学技術用途を中心としたプログラミングで高い利便性を持つライブラリ
  • Pythonで数値計算するための基礎的なライブラリ
  • PythonはJavaやCに比べ処理速度が遅いという弱点があるがNumPyが補ってくれる
  • C/C++やFortranのコードを統合するためのツール
  • C/C++によるメモリ管理を行った計算をNumPyのライブラリが実行することで高速計算が可能

特徴

  • 高速な数値計算
  • 多次元配列を基本的なデータ構造として操作するライブラリ
  • 大量のデータを高速に演算するためndarray(N-dimensional array)という独自のデータ構造を使用

インストールするには

プロンプトから以下を入力。Anacondaをインストールしていれば、Anacondaプロンプトを使用。

> pip install numpy

バージョン指定してインストールするには以下。

> pip install numpy==1.16.0

インストールされたか確認するには

プロンプトから以下を入力する。

> pip list

知っておきたいこと

ndarrayについて

  • ndarrayとはN-dimensional arrayの略。N次元配列を略したもの
  • 同じ型(データ型)やサイズ(次元)が等しい複数の要素を格納する多次元のコンテナ(入れ物)
  • コンテナのサイズは固定されている
  • 要素ごとにデータ型を変えることはできない
  • ndarrayの要素はインデックスを利用して値を取り出せる(Pythonのlistと同じ)
  • また、スライシング(複数の要素を指定して切り出す)できる(Pythonのlistと同じ)

データ型

データ型
int(符号付きの整数)
概要
int88ビットの符号付き整数
int1616ビットの符号付き整数
int3232ビットの符号付き整数
int6464ビットの符号付き整数
データ型
uint(符号なしの整数)
概要
uint88ビットの符号なし整数
uint1616ビットの符号なし整数
uint3232ビットの符号なし整数
uint6464ビットの符号なし整数
データ型概要
float1616ビットの浮動小数点数
float3232ビットの浮動小数点数
float6464ビットの浮動小数点数
float128128ビットの浮動小数点数

ちなみに、8ビット(bit)= 1バイト(byte)

copy と view の違い

copy は遅い!なるべくviewを使うこと!

メモリ効率の観点から大きな配列になるほどviewを使った方がよい。

  • copy :元の配列と違うメモリを使用しているが、要素が同一の意味をもつもの
  • view:元の配列と同じメモリを参照しているもの

appendについて

Python のリストで要素を追加するappendという関数がある。

NumPyにも同様の関数があり、np.appendという。

でも、Python の append のほうが実行速度が早いから、なるべくnp.appendは使わない方がよい。

理由はnp.append では要素のコピーが発生するから。

appendの速度比較

# NumPy の np.append を使用した場合

import numpy as np
import time

t0 = time.time()
a = np.array([1, 2, 3])
for i in range(10000):
    a = np.append(a, [i])
t1 = time.time() - t0
print("時間:", float(t1))

>
時間: 0.04089069366455078
# Python の append を使用した場合

import numpy as np
import time

t0 = time.time()
a = [1, 2, 3]
for i in range(10000):
    a.append(i)
t1 = time.time() - t0
print("時間:", float(t1))

>
時間: 0.0009970664978027344

約41倍速い。私のパソコン環境はこちら。