将2-D gaussian_kde输出/ meshgrid保存到csv python

时间:2013-10-31 07:54:19

标签: python numpy scipy

我是python的新手(纯.net背景)我正在使用this教程来生成二维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

1 个答案:

答案 0 :(得分:1)

似乎您只想将生成的x,y值输出到文件中以供稍后处理(省略零值)。如果是这样,你可能不想重塑Z以简化输出过程(即我的Z1)

fid = open('output.csv','w')
Z1 = (kernel(positions).T, X.shape)
Z = kernel(positions).T
#for currentIndex,elem in enumerate(positions):
for currentIndex,elem in enumerate(Z):
  #if Z1[currentIneex]>0:
  s1 = '%f %f %f\n'%(positions[0][currentIndex], positions[1][currentIndex], Z[currentIndex] )

  fid.write(s1)
fid.close()

我错过了你的问题吗?