Numpy 根据 XYZ 获取最大值

我正在尝试读取包含一些 XYZ 数据的 CSV 文件,但是在使用 Python Natgrid 进行网格化时会导致错误:two input triples have the same x/y coordinates. 这是我的数组:


np.array([[41.540588, -100.348335, 0.052785],

   [41.540588, -100.348335, 0.053798],

   [42.540588, -102.348335, 0.021798],

   [42.540588, -102.348335, 0.022798],

   [43.540588, -103.348335, 0.031798]])

我想删除 XY 重复项并获得最大 Z 值。基于上面的例子,我想删除这个数组的任何最小值:


np.array([[41.540588, -100.348335, 0.053798],

   [42.540588, -102.348335, 0.022798],

   [43.540588, -103.348335, 0.031798]])

我曾尝试使用np.unique,但到目前为止我还没有任何运气,因为它不适用于行(仅列)。


沧海一幻觉
浏览 201回答 3
3回答

森林海

这是一种numpy方法,首先按 排序Z,然后找到每个唯一X和Y对中的第一个,并建立索引:a = np.array([[41.540588, -100.348335, 0.052785],   [41.540588, -100.348335, 0.053798],   [42.540588, -102.348335, 0.021798],   [42.540588, -102.348335, 0.022798],   [43.540588, -103.348335, 0.031798]])# sort by Zb = a[np.argsort(a[:,2])[::-1]]# get first index for each unique x,y pairu = np.unique(b[:,:2],return_index=True,axis=0)[1]# indexc = b[u]>>> carray([[ 4.15405880e+01, -1.00348335e+02,  5.37980000e-02],       [ 4.25405880e+01, -1.02348335e+02,  2.27980000e-02],       [ 4.35405880e+01, -1.03348335e+02,  3.17980000e-02]])

摇曳的蔷薇

如果您能够使用pandas,则可以利用groupby和max>>> pandas.DataFrame(arr).groupby([0,1], as_index=False).max().valuesarray([[ 4.15405880e+01, -1.00348335e+02,  5.37980000e-02],       [ 4.25405880e+01, -1.02348335e+02,  2.27980000e-02],       [ 4.35405880e+01, -1.03348335e+02,  3.17980000e-02]])

LEATH

您可以通过排序和删除重复项来使用 Pandas:import pandas as pddf = pd.DataFrame(arr)res = df.sort_values(2, ascending=False)\        .drop_duplicates([0, 1])\        .sort_values(0).valuesprint(res)array([[  4.15405880e+01,  -1.00348335e+02,   5.37980000e-02],       [  4.25405880e+01,  -1.02348335e+02,   2.27980000e-02],       [  4.35405880e+01,  -1.03348335e+02,   3.17980000e-02]])
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python