10

scipy.stats.gaussian_kdeを介して取得するポイントのx,y分布があります。これは私のコードであり、出力がどのように見えるかです (データはここから取得できます):KDEx,y

import numpy as np
from scipy import stats

# Obtain data from file.
data = np.loadtxt('data.dat', unpack=True)
m1, m2 = data[0], data[1]
xmin, xmax = min(m1), max(m1)
ymin, ymax = min(m2), max(m2)

# Perform a kernel density estimate (KDE) on the data
x, y = np.mgrid[xmin:xmax:100j, ymin:ymax:100j]
positions = np.vstack([x.ravel(), y.ravel()])
values = np.vstack([m1, m2])
kernel = stats.gaussian_kde(values)
f = np.reshape(kernel(positions).T, x.shape)

# Define the number that will determine the integration limits
x1, y1 = 2.5, 1.5

# Perform integration?

# Plot the results:
import matplotlib.pyplot as plt
# Set limits
plt.xlim(xmin,xmax)
plt.ylim(ymin,ymax)
# KDE density plot
plt.imshow(np.rot90(f), cmap=plt.cm.gist_earth_r, extent=[xmin, xmax, ymin, ymax])
# Draw contour lines
cset = plt.contour(x,y,f)
plt.clabel(cset, inline=1, fontsize=10)
plt.colorbar()
# Plot point
plt.scatter(x1, y1, c='r', s=35)
plt.show()

結果

座標付きの赤い点には、(2D プロットのすべての点と同様に) 0 から 0.42 の間の (カーネルまたは)(x1, y1)によって与えられる関連値があります。としましょう。fKDEf(x1, y1) = 0.08

が未満と評価される領域、つまりで与えられたf積分限界で積分する必要があります。xyff(x1, y1)f(x, y)<0.08

私が見たものは、数値積分によって関数pythonと 1 次元配列の積分を実行できますが、2D 配列 (カーネル)で数値積分を実行できるものは見たことがありません。その特定の条件によって指定された領域も認識します(つまり、指定された値未満)ff(x, y)

これはまったくできますか?

4

3 に答える 3