Pythonの数値計算ライブラリNumPyでよく使う機能(関数・メソッド・算術演算子など)を一覧にしてまとめてみました。
配列の生成
NumPy配列の生成に関する主な機能は次の通りです。
– | 記述例 | 機能の説明 |
---|---|---|
1次元配列 | x = numpy.array([1, 2, 3]) | 1次元配列xを生成します。(array型) |
2次元配列 | X = numpy.array([[1,2,3],[4,5,6]]) | 2次元配列Xを生成します。(array型) |
1次元行列 | x = numpy.matrix([1, 2, 3]) | 1次元行列xを生成します。(matrix型) |
2次元行列 | X = numpy.matrix([[1,2,3],[4,5,6]]) | 2次元行列Xを生成します。(matrix型) |
空配列 | X = numpy.empty([m, n]) | サイズがm×nで空の配列Xを生成します。(メモリ領域の確保のみ行い、要素の初期化はしないので高速に配列を生成します) |
全要素が1① | X = numpy.ones((m, n)) | サイズがm×nで全ての要素が1の配列Xを生成します。 |
全要素が1② | X = numpy.ones_like(B) | 配列Bと同じサイズで全ての要素が1の配列Xを生成します。 |
零行列① | X = numpy.zeros((m, n)) | サイズがm×nで全ての要素が0の配列Xを生成します。 |
零行列② | Y = numpy.zeros_like(X) | 配列Xと同じサイズで全ての要素が0の配列Yを生成します。 |
全要素が1つの値 | X = numpy.full([m, n], value) | サイズがm×nで全ての要素がvalueの配列Aを生成します。 |
単位行列 | X = numpy.eye(m) | サイズがm×mの配列X(単位行列)を生成します。 |
三角行列 | X = numpy.tri(m) | サイズがm×mの配列X(三角行列)を生成します。 |
繰り返し① | x = numpy.repeat([1, 2, 3], n) | [1, 2, 3]をn回繰り返した配列xを生成します。 |
繰り返し② | x = numpy.tile([1, 2, 3], n) | [1, 2, 3]をn回繰り返した配列xを生成します。 |
範囲・間隔を指定 | x = numpy.arange(a0, an, d) | 区間[a0, an)、間隔dのデータを要素にもつ配列xを生成します。 |
範囲・要素数を指定 | x = numpy.linspace(a0, an, n) | 区間[a0, an)、要素数nの配列xを生成します。 |
対数スケール | x = numpy.logspace(a0, an , n, base=b) | 区間[a0, an)、要素数nで対数スケール(底はb)で並べられた配列xを生成します。 |
格子状配列 | X = numpy.meshgrid(x, y) | 縦横に等間隔な格子状配列Xを生成します。 |
乱数配列の生成
乱数配列の生成に関する主な機能は次の通りです。
– | 記述例 | 機能の説明 |
---|---|---|
一様乱数(整数)① | x = numpy.random.randint(a0, an, n) | 区間[a0, an)でサンプル数nの一様乱数配列xを生成します。(値は整数) |
一様乱数(整数)② | X = numpy.random.randint(a0, an, (m,n)) | 区間[a0, an) 、サンプル数n、サイズがm×nの一様乱数配列Xを生成します。 |
一様乱数(実数)① | x = numpy.random.rand(n) | 区間[0.0, 1.0)、サンプル数nの一様乱数配列xを生成します。(値は実数) |
一様乱数(実数)② | X = numpy.random.rand(n) | 区間[0.0, 1.0)、サンプル数n、サイズがm×nの一様乱数配列xを生成します。 |
正規分布 | x = numpy.random.normal(mu, sigma, n) | 平均値mu、標準偏差sigma、サンプル数nの正規分布に従う乱数配列xを生成します。 |
標準正規分布 | x = nnmpy.random.randn(n) | サンプル数nの正規分布(平均値0、標準偏差1)に従う乱数配列xを生成します。 |
二項分布 | x = numpy.random.binomial(t, p, n) | 試行回数t、確率p、サンプル数nの二項分布に従う乱数配列xを生成します。 |
ポアソン分布 | x = numpy.random.binomial(lam, n) | 試行回数lam、サンプル数nのポアソン分布に従う乱数配列xを生成します。 |
ベータ分布 | x = numpy.random.beta(a,b,n) | パラメータa, b、サンプル数nのベータ分布に従う乱数配列xを生成します。 |
χ分布 | x = numpy.random.chisquare(df, n) | 自由度df、サンプル数nのカイ二乗分布に従う乱数配列xを生成します。 |
ガンマ分布 | x =numpy.random.gamma(p,sigma,10) | 確率p、標準偏差sigma、サンプル数nのガンマ分布に従う乱数配列xを生成します。 |
F分布 | x = numpy.random.f(num, den, n) | 分子の自由度num、分母の自由度den、サンプル数nのF分布に従う乱数配列xを生成します。 |
算術演算子
配列の算術演算子に関する主な機能は次の通りです。
– | 記述例 | 機能の説明 |
---|---|---|
加算 | z = x + y | 配列x, yの要素同士を加算します。 |
減算 | z = x – y | 配列x, yの要素同士を減算します。 |
乗算 | z = x * y | 配列x, yの要素同士を乗算します。(matrix型の行列の場合は内積を求めます) |
除算 | z = x / y | 配列x, yの要素同士を除算します。 |
剰余 | z = x % y | 配列x, yの要素同士を除算した時の剰余を求めます。 |
冪乗 | y = x ** a | 配列xの要素をa乗します。 |
符号反転 | y = -x | 配列xの要素の符号を反転します。 |
配列操作
「配列の操作」に関する主な機能は次の通りです。
– | 記述例 | 機能の説明 |
---|---|---|
先頭の要素へ代入 | x[0] = value | 1次元配列xにおける先頭の要素に値を代入します。 |
i番目の要素へ代入 | x[i] = value | 1次元配列xにおけるi番目の要素に値を代入します。(先頭は0番目) |
末尾の要素へ代入 | x[-1] = value | 1次元配列xにおける末尾の要素に値を代入します。 |
i~j-1番目の要素へ代入 | x[i:j] = value | 1次元配列xにおけるi番目からj-1番目までの要素に値を代入します。 |
j行目、i列目の要素へ代入① | X[j][i] = value | 2次元配列Xにおけるj行目、i列目にある要素に値を代入します。(0番目から開始) |
j行目、i列目の要素へ代入② | X[j, i] = value | 2次元配列Xにおけるj行目、i列目にある要素に値を代入します。(上の省略形) |
指定領域の要素へ代入 | X[j:j+h, i:i+w] = value | 2次元配列Xにおけるjからj+h行目、iからi+w列目にある要素に値を代入します。 |
配列のコピー | y = x.copy() | 配列xをコピーした新たな配列yを生成します。 |
末尾に要素追加 | z = numpy.append(x, y) | 配列xの末尾に配列yの要素を追加した新しい配列zを生成します。 |
次元数の変更 | X = x.reshape(m, n) | 1次元配列xを2次元配列X(サイズはm×n)に変換します。 |
データ型の変更 | y = x.astype(dtype) | 配列xのデータ型をdtypeに変換した新たな配列yを生成します。 |
書き換え禁止 | x.flags.writeable = False | 配列xの要素を書き換え禁止にします。 |
配列の結合(縦) | Z = numpy.vstack([X, Y]) | 配列X, Yを縦方向に結合します。 |
配列の結合(横) | Z = numpy.hstack([X, Y]) | 配列X, Yを横方向に結合します。 |
配列の分割(縦) | Y = numpy.vsplit(X, n) | 配列Xを縦方向にn個に分割します。 |
配列の分割(横) | Y = numpy.hsplit(X, n) | 配列Xを横方向にn個に分割します。 |
配列の比較(完全一致) | z = numpy.allclose(x, y) | 配列x, yの要素が完全に一致するか調べます。 |
インデックスの移動 | y = numpy.roll(x, n) | 配列xの要素を左右にn個分だけ移動します。 |
配列をリストに変換 | list=x.tolist() | 配列xをリストlistに変換します。 |
データ抽出
「データ抽出」に関する主な機能は次の通りです。
– | 記述例 | 機能の説明 |
---|---|---|
次元数 | dim = X.ndim | 配列Xの次元数を取得します。 |
要素数① | shape = X.shape | 配列Xの各次元の要素数を取得します。 |
要素数② | size = A.size | 配列Aの要素数を取得します。 |
バイト数① | byteX = X.nbytes | 配列Xのバイト数を取得します。 |
バイト数② | byte = X.itemsize | 配列Xの1要素あたりのバイト数を取得します。 |
データ型 | type = X.dtype | 配列Xのデータ型を取得します。 |
先頭の要素 | a = x[0] | 1次元配列xにおけ先頭の要素を取得します。 |
i番目の要素 | a = x[i] | 1次元配列xにおけるi番目の要素を取得します。(先頭は0番目) |
末尾の要素 | a = x[-1] | 1次元配列xにおける末尾の要素を取得します。 |
i~j-1番目の要素 | a = x[i:j] | 1次元配列xにおけるi番目からj-1番目までの要素を取得します。 |
j行目, i列目の要素① | a = X[j][i] | 2次元配列Xにおけるj行目、i列目にある要素を参照します。(0番目から開始) |
j行目, i列目の要素② | a = X[j, i] | 2次元配列Xにおけるj行目、i列目にある要素を参照します。 |
指定領域の要素 | a = X[j:j+h, i:i+w] | 2次元配列Xにおけるjからj+h行目、iからi+w列目にある要素を参照します。 |
行の要素 | a = X[j, :] | 2次元配列Xにおけるj行目にある全ての要素を取得します。 |
列の要素 | a = X[:, i] | 2次元配列Xにおけるi列目にある全ての要素を取得します。 |
複数の条件を満たす要素 | x = numpy.select(condlist, choicelist) | 複数の条件を満たす要素を取得します。 |
行列の対角成分 | a = numpy.diag(X) | 2次元配列Xから対角成分の要素を取得します。 |
条件を満たす要素 | a = x[ numpy.where(condition) ] | 配列xから条件を満たす要素を取得します。 |
ランダム抽出① | a = numpy.random.choice(a, n, replace=True) | 配列xからn個の要素をランダムに取得します。(replaceがTrueなら重複あり) |
ランダム抽出② | a = numpy.random.choice(x, n, p= [0.1, 0.9]) | 配列xから出現確率pに基いてn個の要素をランダムに取得します。 |
シャッフル | x = numpy.random.shuffle(a) | 配列xの要素の順序をシャッフルしてから取得します。 |
要素のインデックス | index = numpy.where(condition) | 配列から条件を満たす要素のインデックスを取得します。 |
最小値要素のインデックス | index = numpy.argmin(x) | 配列xから最小値要素のインデックスを取得します。 |
最大値要素のインデックス | index = numpy.argmax(x) | 配列xから最大値要素のインデックスを取得します。 |
非0要素のインデックス | index = numpy.nonzero(x) | 配列xから0以外の値をもつ要素のインデックスを取得します。 |
非0要素数 | n = numpy.count_nonzero(a) | 配列xから0以外の値をもつ要素数をカウントします。 |
条件を満たす要素数 | n = len(numpy.where(condition)[0]) | 条件式を満たす要素数をカウントします。 |
数学関数
– | 記述例 | 機能の説明 |
---|---|---|
正弦関数 | y = numpy.sin(x) | 正弦関数sin(x)を求めます。(xはラジアン) |
余弦関数 | y = numpy.cos(x) | 余弦関数cos(x)を求めます。 |
正接関数 | y = numpy.tan(x) | 正接関数tan(x)を求めます。 |
逆正弦関数 | y = numpy.arcsin(x) | 逆正弦関数arcsin(x)を求めます。 |
逆余弦関数 | y = numpy.arccos(x) | 逆余弦関数arccos(x)を求めます。 |
逆正接関数 | y = numpy.arctan(x) | 逆正接関数arctan(x)を求めます。 |
ラジアン→度 | deg = numpy.rad2deg(rad) | ラジアン(rad)を度(deg)に変換する。 |
度→ラジアン | rad = numpy.deg2rad(rad) | 度(deg)をラジアン(rad)に変換する。 |
平方根 | y = numpy.sqrt(x) | 配列xの平方根を求めます。 |
立方根 | y = numpy.cbrt(x) | 配列xの立方根(三乗根)を求めます。 |
二乗 | y = numpy.square(x) | 配列xの二乗を求めます。 |
絶対値 | numpy.absolute(x) | 配列xの絶対値を求めます。 |
絶対値(省略形) | numpy.abs(x) | 配列xの絶対値を求めます。 |
符号関数 | numpy.sign(x) | 配列xの符号を求めます。 |
指数関数 | y=numpy.exp(x) | 指数関数を求めます。 |
対数関数(底e) | y=numpy.log(x) | 底がeの対数関数を求めます。 |
対数関数(底10) | y=numpy.log10(x) | 底が10の対数関数を求めます。 |
対数関数(底2) | y=numpy.log2(x) | 底が2の対数関数を求めます。 |
円周率 | pi = numpy.pi | 円周率πを呼び出します。 |
ネイピア数 | e = numpy.e | ネイピア数eを呼び出します。 |
複素数の初期化 | x = np.array([1+1j, 1+2j, 1+3j]) | 複素数を要素にもつ配列xを生成します。 |
実部 | numpy.real(x) | 配列xから実部のみを取り出します。 |
虚部 | numpy.imag(x) | 配列xから虚部を取り出します。 |
複素共役 | numpy.conj(x) | 配列xから複素共役を求めます。 |
行方向の和 | y = numpy.sum(X, axis=1) | 2次元配列Xにおける要素の行方向の和を求めます。 |
列方向の和 | y = numpy.sum(X, axis=0) | 2次元配列Xにおける要素の列方向の和を求めます。 |
行方向の差 | y = numpy.diff(X) | 2次元配列Xにおける要素の行方向の差分を求めます。 |
列方向の差 | y = numpy.diff(X, axis=0) | 2次元配列Xにおける要素の列方向の差分を求めます。 |
行方向の積 | y = numpy.prod(X, axis=1) | 2次元配列Xにおける要素の行方向の積を求めます。 |
列方向の積 | y = numpy.prod(X, axis=0) | 2次元配列Xにおける要素の列方向の積を求めます。 |
統計量
– | 記述例 | 機能の説明 |
---|---|---|
合計 | total = numpy.sum(x) | 配列xの要素の総和を求めます。 |
平均 | ave = numpy.average(x) | 配列xの要素の平均を求めます。 |
分散 | var = numpy.var(x) | 配列xの要素の分散を求めます。 |
標準偏差 | std = numpy.std(x) | 配列xの要素の標準偏差を求めます。 |
不偏分散 | dvar = numpy.var(x, ddof=1) | 配列xの要素の不偏分散を求めます。 |
不偏標準偏差 | dstd = numpy.std(x, ddof=1) | 配列xの要素の不偏標準偏差を求めます。 |
偏差値 | y = numpy.round_(50+10*(x-numpy.average(x))/numpy.std(x)) | 配列xの要素の偏差値を求めます。 |
最大値 | max = numpy.amax(x) | 配列xの要素の最大値を求めます。 |
最小値 | min = numpy.amin(x) | 配列xの要素の最小値を求めます。 |
中央値 | median = numpy.median(x) | 配列xの要素の中央値を求めます。 |
算術平均 | mean = numpy.mean(x) | 配列xの要素の算術平均を求めます。 |
差分 | dx = numpy.diff(x) | 配列xの要素の差分を求めます。 |
勾配 | lx = numpy.gradient(x) | 配列xの要素の勾配(傾き)を求めます。 |
相関係数 | alpha = numpy.corrcoef(x, y)[0, 1] | 配列x, yの相関係数を求めます。 |
ヒストグラム | hist = numpy.histogram(x) | 配列xのヒストグラムを求めます。 |
回帰分析
– | 記述例 | 機能の説明 |
---|---|---|
単回帰分析 | A = numpy.array([x,numpy.ones(len(x))]) a, b = numpy.linalg.lstsq(A.T, y)[0] |
配列x(説明変数)と配列y(目的変数)から最小二乗法により回帰直線の傾きaと切片bを求めます。 |
重回帰分析 | e = numpy.array([x1, x2]) e = numpy.vstack([numpy.ones(e.shape[1]), e]) b, a1, a2 = numpy.linalg.lstsq(e.T, o)[0] |
配列x1, x2(説明変数)と配列y(目的変数)から回帰曲線の傾きa1, a2と切片bを求めます。 |
直線近似 | a, b = numpy.polyfit(x, y, 1) | 配列x(説明変数)と配列y(目的変数)から近似直線の傾きaと切片bを求めます。 |
曲線近似 | a1, a2, b = numpy.polyfit(x, y, 2) | 配列x(説明変数)と配列y(目的変数)から2次の近似曲線の係数a1, a2と切片bを求めます。 |
ベクトル計算
– | 記述例 | 機能の説明 |
---|---|---|
加算 | z = x + y | 2つのベクトルx, yの加算を求めます。 |
減算 | z = x – y | 2つのベクトルx, yの減算を求めます。 |
内積 | z = x.dot(y) もしくは z = numpy.dot(x, y) | 2つのベクトルx, yの内積を求めます。尚、matrix型の場合は算術演算子*だけで内積を計算できます。 |
外積 | z = numpy.cross(x, y) | 2つのベクトルx, yの外積を求めます。 |
ノルム | norm = numpy.linalg.norm(x) | ベクトルxのノルムを求めます。 |
正規化 | e = x / numpy.linalg.norm(x) | ベクトルxの単位ベクトルeを求めます。(正規化) |
行列計算
– | 記述例 | 機能の説明 |
---|---|---|
加減算 | Z = X + Y | 2つの行列X, Yの加算を求めます。 |
内積 | Z = X.dot(Y) もしくは Z=numpy.dot(X, Y) | 2つの行列X, Yの内積を求めます。尚、matrix型の場合は算術演算子*だけで内積を計算できます。 |
外積 | Z = numpy.cross(X, Y) | 2つの行列X, Yの外積を求めます。 |
階数(ランク) | rank = numpy.linalg.matrix_rank(X) | 行列Xの階数(ランク)を求めます。 |
行列式 | det = numpy.linalg.det(X) | 行列Xから行列式detを求めます。 |
転置行列 | Xt = X.T | 行列Xの転置行列Xtを求めます。 |
固有値・固有ベクトル | lam, vec = numpy.linalg.eig(X) | 行列Xの固有値lamと固有ベクトルvecを求めます。 |
逆行列 | invX = numpy.linalg.inv(X) | 行列Xの逆行列invXを求めます。 |
擬似逆行列 | pinvX = numpy.linalg.pinv(X) | 行列Xの疑似逆行列pinvXを求めます。 |
特異値分解(SVD) | U, S, V = numpy.linalg.svd(X) | 行列Xを直交行列U, Vと行列Sに分解します。 |
QR分解 | Q, R = numpy.linalg.qr(X) | 行列Xを直交行列Qと上三角行列Rに分解します。 |
コレスキー分解 | L = numpy.linalg.cholesky(X) | 正定値対称行列Xを分解し、下三角行列Lを求めます。 |
回転行列 | – | 行列Xの回転行列を求めます。 |
信号処理
– | 記述例 | 機能の説明 |
---|---|---|
1次元FFT | f = numpy.fft.fft(x) | 1次元の高速フーリエ変換により、1次元配列xのデータを時間領域から周波数領域に変換します。 |
2次元FFT | F = numpy.fft.fft(X) | 2次元の高速フーリエ変換により、2次元配列Xのデータを時間領域から周波数領域に変換します。 |
零周波数成分の移動 | Fs = numpy.fft.fftshift(F) | 2次元配列Fの零周波数成分を左上から中心に移動させた新しい配列Fsを生成します。 |
1次元IFFT | x = numpy.fft.ifft(f) | 1次元の高速逆フーリエ変換により、配列fのデータを周波数領域から時間領域に変換します。 |
2次元逆FFT | X = numpy.fft.ifft(F) | 2次元の高速逆フーリエ変換により、配列fのデータを周波数領域から時間領域に変換します。 |
周波数軸の生成 | freq = numpy.fft.fftfreq(N, d) | サンプル数N、サンプリング周期の周波数軸の値を求めます。 |
スペクトル解析 | – | – |
ノイズ除去 | – | – |
ファイル処理
– | 記述例 | 機能の説明 |
---|---|---|
読込① | X = numpy.loadtxt(filename, delimiter, skiprows, dtype) | テキスト形式のファイルを読み込んで、データをNumPy型配列Xに格納します。(filename:ファイル名, delimiter:区切り文字, skiprows:読み飛ばすヘッダ行の行数 dtype:データ型) |
読込② | X = numpy.genfromtxt(filename, delimiter, skip_header, dtype) | テキスト形式のファイルを読み込んで、データをNumPy型配列Xに格納します。(filename:ファイル名, delimiter:区切り文字, skiprows:読み飛ばすヘッダ行の行数 dtype:データ型) |
書込① | numpy.savetxt(filename, x, delimiter) | NumPy型配列xのデータをテキスト形式でファイルに書き込みます。(filename:ファイル名, delimiter:区切り文字) |
書込② | numpy.savez(filename, a, b, …) | 複数の配列a, b, …のデータをバイナリ形式(非圧縮)で書き込みます。 |
書込③ | numpy.savez_compressed(filename, a, b, …) | 複数の配列a, b, …のデータをバイナリ形式(圧縮)で書き込みます。 |
コメント