我有两个数据框,其中一个有两列(图形边缘列表),另一个数据框是这些点的位置。我想在第一个数据帧中搜索并替换每个点的 x 和 y 坐标,而不是两个单独数据帧中的点。首先,我将数据帧转换为 numpy 数组。 例如,假设我们将 xx 作为边缘列表,将 yy 作为坐标,如下所示:
xx= np.array([(4,2),(3,5)])
yy=np.array([(2,6,7),(5,5,6),(4,8,9),(3,2,2)])
所以 xx 是我们的边缘点,yy 是每个点的坐标(例如点 4 的 x 值为 8,y 值为 9) 然后我尝试用相应的 x 坐标值替换节点:
zz=[]
for i in np.nditer(xx,order='F'):
cc=np.where(yy[:,0]==i)
zz.append(cc[0][0])
zz=np.array(zz)
q=[]
for i in range(xx.size):
q.append(yy[zz[i],1])
xcoordinates=np.array(q).reshape(int(xx.size/2),2)
但是 reshape 后结果不正确:
array([[8, 2],
[6, 5]])
请告诉我如何获得 x 的结果:
[8,6]
[2,5]
我对 python 还很陌生,无法理解复杂的代码。
最佳答案
需要对第二个数组进行一些处理,但您可以创建一个可以使用 xx
进行索引的查找数组。 。
u = np.empty(yy[:, 0].max() + 1, dtype=yy.dtype)
u[yy[:, 0]] = yy[:, 1]
u[xx]
array([[8, 6],
[2, 5]])
<小时/>
此答案提出了一些您应该考虑的假设。
1) yy
必须是唯一的,并且必须有一个整数 dtype
2) xx
必须关注yy.min() < xx < yy.max()
否则你会得到 IndexError
3) xx
的所有值必须位于 y[:, 0]
否则您将在映射中得到垃圾值。
关于python - 如何迭代 numpy 矩阵和填充值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56797240/