Y軸の高さとX軸の長さとして、100の数字のリストが1つあります:一定のステップ5で1〜100。(x、y)の曲線に含まれる面積を計算する必要があります。ポイント、X軸、長方形とScipyを使用します。この曲線の関数を見つける必要がありますか?か否か? ...私が読んだほとんどすべての例は、Y軸の特定の方程式に関するものです。私の場合、方程式はなく、リストのデータのみです。古典的な解決策は、YポイントとステップX距離で複数のポイントを追加することです... Scipyを使用して何かアイデアがありますか?
ScipyとNumpyを使用して、数値(有限基本)方法に焦点を当てた本を誰かお勧めできますか? ...
Numpyおよびscipyライブラリには、複合台形( numpy.trapz )およびSimpsonの( scipy.integrate.simps )ルールが含まれています。
以下に簡単な例を示します。 trapz
とsimps
の両方で、引数dx=5
は、x軸に沿ったデータの間隔が5単位であることを示します。
from __future__ import print_function
import numpy as np
from scipy.integrate import simps
from numpy import trapz
# The y values. A numpy array is used here,
# but a python list could also be used.
y = np.array([5, 20, 4, 18, 19, 18, 7, 4])
# Compute the area using the composite trapezoidal rule.
area = trapz(y, dx=5)
print("area =", area)
# Compute the area using the composite Simpson's rule.
area = simps(y, dx=5)
print("area =", area)
出力:
area = 452.5
area = 460.0
Simpsons rule または Trapezium rule を使用して、一定間隔でy値のテーブルが与えられたグラフの下の面積を計算できます。
Simpsonsルールを計算するPythonスクリプト:
def integrate(y_vals, h):
i = 1
total = y_vals[0] + y_vals[-1]
for y in y_vals[1:-1]:
if i % 2 == 0:
total += 2 * y
else:
total += 4 * y
i += 1
return total * (h / 3.0)
h
はy値間のオフセット(またはギャップ)であり、y_vals
は、Y値のウェルの配列です。
例(上記の関数と同じファイル内):
y_values = [13, 45.3, 12, 1, 476, 0]
interval = 1.2
area = integrate(y_values, interval)
print("The area is", area)
Sklearnがインストールされていない場合、sklearn.metrics.aucを使用するのが簡単な方法です
これは、任意のxおよびy配列が与えられた台形規則を使用して曲線下の面積を計算します
import numpy as np
from sklearn.metrics import auc
dx = 5
xx = np.arange(1,100,dx)
yy = np.arange(1,100,dx)
print('computed AUC using sklearn.metrics.auc: {}'.format(auc(xx,yy)))
print('computed AUC using np.trapz: {}'.format(np.trapz(yy, dx = dx)))
両方が同じ領域を出力します:4607.5
sklearn.metrics.aucの利点は、任意の間隔の 'x'配列を受け入れることができることです。それが昇順であることを確認するだけです。そうしないと、結果が不正確になります。