如何在python中外推规则网格的点

问题描述

我有一个 numpy 点数组,想在定义的方向上扩展我的点(xyz)。这是我的数组:

coordinates=np.array([[1.,19.,4.],[2.,4.5],[1.,20.,[3.,4.]])

这些点位于两个 y 网格上:1920。我想在这些网格线中扩展我的点。第一个网格有两个点。外推点的 xy 坐标是固定的。 y 等于网格值(19 或 20),x 等于网格的最后一个点多一个单位。对于第一个网格,两个点的新 xy(3.,19.)(4.,19.)z 应计算为:

z of last point + (z of last point - z of one point before the last)/2

如果网格中只有一个点,我会复制该点的值。在第一个网格中,第一个外推点的 z 值为:

4.5 + (4.5-4)/2 = 4.75

第二点是

4.75 + (4.75-4.5)/2 = 4.875

我想对下一个网格 (y=20) 做同样的事情,最终将所有四个点添加到现有数组中:

all_points=np.array([[1.,\
                     [3.,4.75],[4.,4.875],20,3.75],[5.,3.625]])

我尝试了以下操作,但首先我不知道如何动态生成 z 值。目前,它正在为每个网格的两个新生成点计算相同的 z 值。另一个问题是我的代码效率不高,我相信有更快的方法来做到这一点:

nums,counts=np.unique(coordinates[:,1],return_counts=True) # gives the y grids
new_y=nums
cum=np.cumsum(counts)-1
new_x=[]
for i in cum:
    new_x.append (coordinates[i,0])
new_x=np.array(new_x)
new_x_y=[]
for m,n in zip (new_x,new_y):
    new_x_y.append([m,n])
    new_x_y.append([m+1,n])
new_x_y=np.array(new_x_y)
z_difference=[]
for i in cum:
    z_difference.append((coordinates[i,-1]-coordinates[i-1,-1])/2)# to find the difference of last two points of each grid
new_z=[]
for i in range (len(cum)-1):
    new_z.append (coordinates[cum[i],-1]+z_difference)#to find the new z of each extrapolated point
new_z=np.array(new_z)
all_z=np.repeat (new_z,repeats=new_z.shape[1],axis=1)
final_arr=np.hstack ([new_x_y,all_z.T])

在此之前,我非常感谢在 python 中解决我的问题的任何帮助。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...