目次
SciPy
前回、Pythonのmatplotlibでhist関数を使って複数のヒストグラムを同時に表示する方法とコツを紹介しました。
【matplotlib】hist関数で複数のヒストグラムを同時に表示する方法とコツ[Python]
matplotlib 前回、Pythonのmatplotlibでヒストグラムを表示するhist関数を紹介しました。 今回はmatplotlibのhist関数で複数のヒストグラムを表示する方法とコツを紹介…
今回はSciPyのargrelmax、argrelminを使った極大値、極小値の取得方法を紹介します。
ちなみにSciPyのfind_peaksを使った極大値、極小値の取得方法はこちらの記事で紹介していますので、よかったらどうぞ。
【SciPy】find_peaksを使って極大値、極小値、ゼロ交差点を取得する方法[Python]
SciPy 前回、PythonのPandasでデータフレームをcsv、tsvファイルとして保存する方法と読み込む方法を紹介しました。 今回はSciPyのfind_peaksを使って、極大値(上向の…
まず極大値、極小値を取得するグラフをこんな感じに作成してみました。
import numpy as np
import matplotlib.pyplot as plt
import random
x = range(100)
random.seed(100)
y = [np.sin(np.radians(x_val)*10) + random.uniform(-0.5, 0.5) for x_val in x]
fig = plt.figure()
plt.clf()
plt.plot(x, y)
plt.show()
実行結果
それでは始めていきましょう。
argrelmax、argrelminを使った極大値、極小値の取得方法
argrelmax、argrelminを使うには「scipy.signal」の「argrelmax」と「argrelmin」をインポートします。
そしてグラフのYの値を通常のリストではなく、NumPyのアレイとしてそれぞれの関数に渡します。
その際、Xの値は必要ありません。
そして極大値、極小値となる要素のインデックスが返ってきます。
最終的にはそのインデックスとXの値のリスト、Yの値のリストに用いることで、極大値、極小値となるXの値とYの値が取得できます。
まずは極大値を取得してみます。
import numpy as np
import matplotlib.pyplot as plt
import random
from scipy.signal import argrelmax
x = range(100)
random.seed(100)
y = [np.sin(np.radians(x_val)*10) + random.uniform(-0.5, 0.5) for x_val in x]
relmax = argrelmax(np.array(y))
x_relmax = [x[ind] for ind in relmax[0]]
y_relmax = [y[ind] for ind in relmax[0]]
fig = plt.figure()
plt.clf()
plt.plot(x, y)
plt.scatter(x_relmax, y_relmax, color="Red")
plt.show()
実行結果
次に極小値を取得してみます。
import numpy as np
import matplotlib.pyplot as plt
import random
from scipy.signal import argrelmin
x = range(100)
random.seed(100)
y = [np.sin(np.radians(x_val)*10) + random.uniform(-0.5, 0.5) for x_val in x]
relmin = argrelmin(np.array(y))
x_relmin = [x[ind] for ind in relmin[0]]
y_relmin = [y[ind] for ind in relmin[0]]
fig = plt.figure()
plt.clf()
plt.plot(x, y)
plt.scatter(x_relmin, y_relmin, color="Red")
plt.show()
実行結果
ちなみにargrelmax、argrelminに通常のリストを渡すとエラーとなります。
import numpy as np
import matplotlib.pyplot as plt
import random
from scipy.signal import argrelmax
x = range(100)
random.seed(100)
y = [np.sin(np.radians(x_val)*10) + random.uniform(-0.5, 0.5) for x_val in x]
relmax = argrelmax(y)
x_relmax = [x[ind] for ind in relmax[0]]
y_relmax = [y[ind] for ind in relmax[0]]
fig = plt.figure()
plt.clf()
plt.plot(x, y)
plt.scatter(x_relmax, y_relmax, color="Red")
plt.show()
実行結果
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
Cell In[1], line 11
8 random.seed(100)
9 y = [np.sin(np.radians(x_val)*10) + random.uniform(-0.5, 0.5) for x_val in x]
---> 11 relmax = argrelmax(y)
13 x_relmax = [x[ind] for ind in relmax[0]]
14 y_relmax = [y[ind] for ind in relmax[0]]
(中略)
AttributeError: 'list' object has no attribute 'shape'
次回はNumPyのndarrayではインデックスをまとめたリストで直接要素を取得可能であることを紹介します。
【NumPy】NumPyのndarrayではインデックスをまとめたリストで直接要素を取得可能な件[Python]
NumPy 前回、PythonのSciPyでargrelmax、argrelminを使って極大値、極小値を取得する方法を紹介しました。 今回はNumPyのndarrayではインデックスをまとめたリストで直…
ではでは今回はこんな感じで。
コメント