音楽プログラミングの超入門(仮)

Python / 音楽情報処理 初心者が、初心者にも分かるような記事を書きたい。

【Python】 array(numpy.ndarray)型の操作いろいろ

Python の信号処理では、array(numpy.ndarray)型の配列を色々いじくりまわして難しい計算を行なっていくので、基本的な操作を知っておかないと不便です。このページは array 型配列に対する操作を羅列しくだけのページで,具体的には次のようなことを紹介しています。

  • numpy.ndarray の属性・メソッド
  • その他の便利な操作
  • よく使う(かもしれない) SciPy の関数

随時追加していくと思います。(多分)
色々抜けていると思うので、これが便利、などありましたら教えてください。

array型の操作

numpy.ndarray の属性・メソッドは全てここでみれます。下では信号処理で(個人的に)よく使うものをピックアップしています。

# -*- coding: utf-8 -*-
from scipy import rand

ar = rand(100, 200) # (100 * 200) の配列

# ================
#  属性・メソッド
# ================

# Tuple of array dimensions
shape = ar.shape
dim1 = shape[0] # 100
dim2 = shape[1] # 200

# 転置
ar_T = ar.T

# 配列のコピー(deepcopy : ar と ar_copy は別の参照を持つ)
ar_copy = ar.copy()

# Reshape
ar_reshape = ar.reshape(50, 400) # (50 * 400) の配列

# ==================
#  その他便利なやつ
# ==================

# n個ごと(n-1個飛ばし?)
ar_step3 = ar[::3] # 2個飛ばし(第1次元)

# Reverse
ar_rv1 = ar[::-1] # 第1次元をリバース
ar_rv2 = ar[:, ::-1] # 第2次元をリバース

# =======================
#  よく使う SciPy の関数
# =======================
from scipy import identity
from scipy import dot, roll
from scipy.linalg import inv

I = identity(100) # (100 * 100) の単位行列

# 行列積
ar_ar = dot(ar, ar.T) # (100 * 200)(200 * 100) → (100 * 100)

# 行列の回転(シフト)
ar_roll_3 = roll(ar, 3, axis = 1) # 第2次元を3つシフト

# 逆行列
I_inv = inv(I) # I_inv = I

まとめ

随時追加予定