我对 python 非常陌生(具有纯 .net 背景)我正在使用本教程生成二维 kde 分析。
生成一些随机的二维数据:
from scipy import stats
def measure(n):
"Measurement model, return two coupled measurements."
m1 = np.random.normal(size=n)
m2 = np.random.normal(scale=0.5, size=n)
return m1+m2, m1-m2
m1, m2 = measure(2000)
xmin = m1.min()
xmax = m1.max()
ymin = m2.min()
ymax = m2.max()
对数据执行核密度估计:
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)
Z = np.reshape(kernel(positions).T, X.shape)
绘制结果:
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111)
ax.imshow(np.rot90(Z), cmap=plt.cm.gist_earth_r,
extent=[xmin, xmax, ymin, ymax])
ax.plot(m1, m2, 'k.', markersize=2)
ax.set_xlim([xmin, xmax])
ax.set_ylim([ymin, ymax])
plt.show()
我需要将其输出为 csv 或其他可解析格式,以便我可以在 .net 应用程序上呈现它。我查看了 pmeshcolor 方法,它可以生成 svg,但对于大型数据集来说,它变得非常庞大。
我需要以下内容,以便我可以在 .net 应用程序上进一步过滤它
输入:
x1 y1
x2 y2
x3 y3
...(或者它可以用逗号分隔,基本上我将从形状文件中提取它或直接从数据库中获取,我主要关心的是输出)
预期产出
x1 y1 value_from_kde
x2 y2 value_from_kde
x3 y3 value_from_kde
...其中 value_from_kde 是该特定点的 gaussian_kde 函数的输出,我知道 gaussian_kde 使用网格来执行此分析,如果该点对点值不可能,则其输出也是网格,具有相关值的矩形也是可以接受
矩形坐标 [p1 p2 p3 p4] value_from_kde
输出不应有 value_from_kde 为零的记录。
注意:保持矩形坐标与输入相同的格式很重要,这样我就可以使用相同的投影进行渲染,就像我使用 x,y 以 UTM 格式输入 kde 一样,看起来像这样 671290.9984 2727340.004