如何将标量函数重塑为网格上的标量函数

时间:2019-07-18 13:44:25

标签: numpy grid

我的问题更多是关于如何组织np.meshgrid以便更好地理解它的一般问题。因此,我有一组3d点,对于每个点,我都有一个与之关联的标量值。因此,对于此函数,其形状为n x 1,但是现在我想将此函数以相同的值重塑为np.meshgrid,这意味着使其成为3D numpy数组。但是,我不知道如何开始执行此操作,因为我不知道它的外观。您知道我该怎么做以及其背后的原因吗?

谢谢,我真的是np.meshgrids的新手,我仍然无法完全理解它。

1 个答案:

答案 0 :(得分:0)

我将以2D方式进行解释(如果您理解起来很简单,则可以转到3D)。

假设您有一个二维平面的截面。可以说它是一个长度和宽度为5的正方形。但是x的坐标在[10,15]中 和[15,20]中的y分别。

现在,您要在此部分上评估一个函数(假设分辨率为0.5)。 Numpys meshgrid 现在为您提供了两个矩阵,其中保存了每个“像素”(0.5 x 0.5区域)的x和y坐标。

在某些代码中,它看起来像:

import numpy as np

x = np.arange(10,15,.5)
y = np.arange(15,20,.5)

xx, yy = np.meshgrid(x,y, indexing = 'ij')

我们的区域被分成10x10像素,因此我们希望形状为:

xx.shape
>>> (10, 10)
yy.shape
>>> (10, 10)

看着xx

array([[10. , 10. , 10. , 10. , 10. , 10. , 10. , 10. , 10. , 10. ],
       [10.5, 10.5, 10.5, 10.5, 10.5, 10.5, 10.5, 10.5, 10.5, 10.5],
       [11. , 11. , 11. , 11. , 11. , 11. , 11. , 11. , 11. , 11. ],
       [11.5, 11.5, 11.5, 11.5, 11.5, 11.5, 11.5, 11.5, 11.5, 11.5],
       [12. , 12. , 12. , 12. , 12. , 12. , 12. , 12. , 12. , 12. ],
       [12.5, 12.5, 12.5, 12.5, 12.5, 12.5, 12.5, 12.5, 12.5, 12.5],
       [13. , 13. , 13. , 13. , 13. , 13. , 13. , 13. , 13. , 13. ],
       [13.5, 13.5, 13.5, 13.5, 13.5, 13.5, 13.5, 13.5, 13.5, 13.5],
       [14. , 14. , 14. , 14. , 14. , 14. , 14. , 14. , 14. , 14. ],
       [14.5, 14.5, 14.5, 14.5, 14.5, 14.5, 14.5, 14.5, 14.5, 14.5]])

yy

array([[15. , 15.5, 16. , 16.5, 17. , 17.5, 18. , 18.5, 19. , 19.5],
       [15. , 15.5, 16. , 16.5, 17. , 17.5, 18. , 18.5, 19. , 19.5],
       [15. , 15.5, 16. , 16.5, 17. , 17.5, 18. , 18.5, 19. , 19.5],
       [15. , 15.5, 16. , 16.5, 17. , 17.5, 18. , 18.5, 19. , 19.5],
       [15. , 15.5, 16. , 16.5, 17. , 17.5, 18. , 18.5, 19. , 19.5],
       [15. , 15.5, 16. , 16.5, 17. , 17.5, 18. , 18.5, 19. , 19.5],
       [15. , 15.5, 16. , 16.5, 17. , 17.5, 18. , 18.5, 19. , 19.5],
       [15. , 15.5, 16. , 16.5, 17. , 17.5, 18. , 18.5, 19. , 19.5],
       [15. , 15.5, 16. , 16.5, 17. , 17.5, 18. , 18.5, 19. , 19.5],
       [15. , 15.5, 16. , 16.5, 17. , 17.5, 18. , 18.5, 19. , 19.5]])

所以对于x方向为4像素,y方向为5像素的坐​​标,您可以得到:

x_coord = xx[4,5]
y_coord = yy[4,5]
x_coord
>>> 12.0
y_coord
>>> 17.5

如果要在3D模式下使用,则只有三个立方体,而不是两个矩阵。

现在,如果您要对此求值,请说:

def fun(x,y):
    return np.sin(x)*np.cos(y)

您可以像这样使用xxyy

zz = fun(xx,yy)
zz.shape
>>> (10, 10)

它看起来像:

import matplotlib.pyplot as plt
plt.contourf(xx,yy,zz)

enter image description here