问题描述
我有一个 numpy 点数组,想在定义的方向上扩展我的点(x
、y
和 z
)。这是我的数组:
coordinates=np.array([[1.,19.,4.],[2.,4.5],[1.,20.,[3.,4.]])
这些点位于两个 y
网格上:19
和 20
。我想在这些网格线中扩展我的点。第一个网格有两个点。外推点的 x
和 y
坐标是固定的。 y
等于网格值(19 或 20),x
等于网格的最后一个点多一个单位。对于第一个网格,两个点的新 x
和 y
是 (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 (将#修改为@)