我的目标是插入一些数据。要做到这一点,我必须创建一个meshgrid。 为了完成这一步,我得到了一个带有我的2D坐标的数组" coord" (第一列:元素编号,第二列:X和第三列:Y)。
我使用np.meshgrid做一个meshgrid,如下所示。 但我的结果似乎很奇怪,所以我想知道我是否已经完成了 一个错误......我必须在meshgrid步骤之前重新组织我的数据吗?
import numpy as np
coord = np.array([[ 1. , -1.38888667, -1.94444333],
[ 2. , -1.94444333, -1.38888667],
[ 3. , 0.27777667, -1.94444333],
[ 4. , -0.27777667, -1.38888667],
[ 5. , 1.94444333, -1.94444333],
[ 6. , 1.38888667, -1.38888667],
[ 7. , -1.38888667, -0.27777667],
[ 8. , -1.94444333, 0.27777667],
[ 9. , 0.27777667, -0.27777667],
[ 10. , -0.27777667, 0.27777667],
[ 11. , 1.94444333, -0.27777667],
[ 12. , 1.38888667, 0.27777667],
[ 13. , -1.38888667, 1.38888667],
[ 14. , -1.94444333, 1.94444333],
[ 15. , 0.27777667, 1.38888667],
[ 16. , -0.27777667, 1.94444333],
[ 17. , 1.94444333, 1.38888667],
[ 18. , 1.38888667, 1.94444333]])
[Y,X]=np.meshgrid(coord[:,2],coord[:,1])
如果我画Y,我得到了:
plt.imshow(Y);plt.colorbar();plt.show()
----编辑后-----
我想知道(例如)netgrid的坐标是否必须严格增加?如果有一个更好的方法,我有一些没有组织的坐标?
对于插值,我想使用:
def interpolate(values, tri,uv,d=2):
simplex = tri.find_simplex(uv)
vertices = np.take(tri.simplices, simplex, axis=0)
temp = np.take(tri.transform, simplex, axis=0)
delta = uv- temp[:, d]
bary = np.einsum('njk,nk->nj', temp[:, :d, :], delta)
return np.einsum('nj,nj->n', np.take(values, vertices), np.hstack((bary, 1.0 - bary.sum(axis=1, keepdims=True))))
在Speedup scipy griddata for multiple interpolations between two irregular grids之前的堆栈中使用,允许限制计算时间