【问题标题】:Save 2-D gaussian_kde output/meshgrid to csv python将二维 gaussian_kde 输出/网格网格保存到 csv python
【发布时间】:2013-11-06 20:50:22
【问题描述】:

我是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

【问题讨论】:

    标签: python numpy scipy


    【解决方案1】:

    您似乎只想将结果 x,y,value 输出到文件以供以后处理(省略零值)。如果是这样,您可能不想重塑 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()
    

    我是否遗漏了您的问题?

    【讨论】:

    • if Z[currentIndex]>0: ValueError: 具有多个元素的数组的真值不明确。使用 a.any() 或 a.all()
    • 如果我删除 if 语句仍然有错误 s1 = '%f %f %f\n'%(elem[0],elem[1],Z[currentIndex])' 'TypeError : 需要浮点参数,而不是 numpy.ndarray
    • 您正确地总结了我的问题(只需输出到 x,y,value 其中 value > 0)
    • @Asad,非常重要的一点。我定义了一个名为 Z1 的变量。它与 Z 不同。您的评论说 Z[currentIndex]>0 这不起作用,因为 Z 是一个矩阵。您需要先定义 Z1 - 它与 Z 相同,但不会重新塑造成矩阵。 Z1 = (kernel(positions).T, X.shape) 和 Z = np.reshape(kernel(positions).T, X.shape)。我的代码使用 Z1,因为它是一维向量,并且仍然有正确排序的元素。
    • 我知道。我更改了 Z = (kernel(positions).T, X.shape)。我相信它仍然会重塑数组,因为您将 X.shape 作为第二部分提供[可能会变成一个元组,我不太了解 python 符号]。
    猜你喜欢
    • 2022-01-02
    • 2019-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多