我的问题更多是关于如何组织np.meshgrid以便更好地理解它的一般问题。因此,我有一组3d点,对于每个点,我都有一个与之关联的标量值。因此,对于此函数,其形状为n x 1,但是现在我想将此函数以相同的值重塑为np.meshgrid,这意味着使其成为3D numpy数组。但是,我不知道如何开始执行此操作,因为我不知道它的外观。您知道我该怎么做以及其背后的原因吗?
谢谢,我真的是np.meshgrids的新手,我仍然无法完全理解它。
答案 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)
您可以像这样使用xx
和yy
:
zz = fun(xx,yy)
zz.shape
>>> (10, 10)
它看起来像:
import matplotlib.pyplot as plt
plt.contourf(xx,yy,zz)