【问题标题】:How to convert data from meshgrid format into array and vice versa: Python如何将网格网格格式的数据转换为数组,反之亦然:Python
【发布时间】:2019-04-12 22:18:18
【问题描述】:

我有一个数据集data = f(x,y)。数据以网格网格格式提供。我想将它转换为一个数组,以便每一行都以[x,y,data] 格式排序。另外,反过来怎么办?

import numpy as np

x = np.arange(-5, 5, 0.1)
y = np.arange(-4, 4, 0.1)
xx, yy = np.meshgrid(x, y)
data = np.sin(xx**2 + yy**2) / (xx**2 + yy**2)

print(data)  #Now it is in meshgrid format

【问题讨论】:

    标签: python arrays numpy


    【解决方案1】:

    您可以使用以下方法重塑数据:

    1.网格格式

    import numpy as np
    
    x = np.arange(-5, 5, 2)
    y = np.arange(-4, 4, 2)
    xx, yy = np.meshgrid(x, y)
    data = np.sin(xx**2 + yy**2) / (xx**2 + yy**2)
    
    print(data)  # In meshgrid format
    

    输出:

    [[-0.00386885 -0.00529407 -0.05655279 -0.05655279 -0.00529407]
     [-0.02288393  0.03232054 -0.19178485 -0.19178485  0.03232054]
     [-0.00529407  0.04579094  0.84147098  0.84147098  0.04579094]
     [-0.02288393  0.03232054 -0.19178485 -0.19178485  0.03232054]]
    

    2。列格式:

    z = len(x)*len(y)
    a = np.reshape(xx, z)
    b = np.reshape(yy, z)
    c = np.reshape(data, z)
    
    new = np.c_[a, b, c]
    
    print(new) # In an array ordered like [x, y, data]
    

    输出:

    [[-5.00000000e+00 -4.00000000e+00 -3.86884558e-03]
     [-3.00000000e+00 -4.00000000e+00 -5.29407000e-03]
     [-1.00000000e+00 -4.00000000e+00 -5.65527936e-02]
     [ 1.00000000e+00 -4.00000000e+00 -5.65527936e-02]
     [ 3.00000000e+00 -4.00000000e+00 -5.29407000e-03]
     [-5.00000000e+00 -2.00000000e+00 -2.28839270e-02]
     [-3.00000000e+00 -2.00000000e+00  3.23205413e-02]
     [-1.00000000e+00 -2.00000000e+00 -1.91784855e-01]
     [ 1.00000000e+00 -2.00000000e+00 -1.91784855e-01]
     [ 3.00000000e+00 -2.00000000e+00  3.23205413e-02]
     [-5.00000000e+00  0.00000000e+00 -5.29407000e-03]
     [-3.00000000e+00  0.00000000e+00  4.57909428e-02]
     [-1.00000000e+00  0.00000000e+00  8.41470985e-01]
     [ 1.00000000e+00  0.00000000e+00  8.41470985e-01]
     [ 3.00000000e+00  0.00000000e+00  4.57909428e-02]
     [-5.00000000e+00  2.00000000e+00 -2.28839270e-02]
     [-3.00000000e+00  2.00000000e+00  3.23205413e-02]
     [-1.00000000e+00  2.00000000e+00 -1.91784855e-01]
     [ 1.00000000e+00  2.00000000e+00 -1.91784855e-01]
     [ 3.00000000e+00  2.00000000e+00  3.23205413e-02]]
    

    【讨论】:

      【解决方案2】:

      您可以使用以下两种表达方式:

      # Convert from mesh to rows:
      row_format = np.stack([z.ravel() for z in (xx, yy, data)], axis=1)
      
      # Convert from rows to mesh:
      xx, yy, data = np.swapaxes(row_format, 0, 1).reshape(3, len(y), len(x))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-07-24
        • 2011-02-03
        • 2011-09-09
        • 2013-07-14
        • 1970-01-01
        • 1970-01-01
        • 2013-06-16
        相关资源
        最近更新 更多