Wizard Notes

Python, JavaScript を使った音楽信号分析の技術録、作曲活動に関する雑記

Numpy: 1次元配列から、特定の値の範囲のみを抽出した1次元配列を作る

やりたいこと

numpyの1次元配列 x の内、v_min 以上 v_max以下の要素だけを抽出した1次元配列 y と、対応するインデックスの1次元配列 indices を得たいとします。

>>> x
array([0.20204346, 0.71742434, 0.05195665, 0.50794105, 0.08809835,
       0.80818671, 0.20618913, 0.60163578, 0.55757078, 0.74752494])
>>> v_min, v_max = 0.2, 0.8
...
>>> y
array([0.20204346, 0.71742434, 0.50794105, 0.20618913, 0.60163578,
       0.55757078, 0.74752494])
>>> indices
array([0, 1, 3, 6, 7, 8, 9], dtype=int64)

解決方法

np.where()np.logical_and() を使います。

>>> y = x[np.logical_and(x>v_min, x<v_max)]
>>> y
array([0.20204346, 0.71742434, 0.50794105, 0.20618913, 0.60163578,
       0.55757078, 0.74752494])
>>> indices = np.where(np.logical_and(x>v_min, x<v_max))[0]
>>> indices
array([0, 1, 3, 6, 7, 8, 9], dtype=int64)