为了账号安全,请及时绑定邮箱和手机立即绑定

Numpy 根据 XYZ 获取最大值

Numpy 根据 XYZ 获取最大值

沧海一幻觉 2021-08-17 18:32:33
我正在尝试读取包含一些 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,但到目前为止我还没有任何运气,因为它不适用于行(仅列)。
查看完整描述

3 回答

?
森林海

TA贡献2011条经验 获得超2个赞

这是一种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 Z

b = a[np.argsort(a[:,2])[::-1]]

# get first index for each unique x,y pair

u = np.unique(b[:,:2],return_index=True,axis=0)[1]

# index

c = b[u]

>>> c

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]])


查看完整回答
反对 回复 2021-08-17
?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

如果您能够使用pandas,则可以利用groupby和max


>>> pandas.DataFrame(arr).groupby([0,1], as_index=False).max().values


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]])


查看完整回答
反对 回复 2021-08-17
?
LEATH

TA贡献1936条经验 获得超6个赞

您可以通过排序和删除重复项来使用 Pandas:


import pandas as pd


df = pd.DataFrame(arr)


res = df.sort_values(2, ascending=False)\

        .drop_duplicates([0, 1])\

        .sort_values(0).values


print(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]])


查看完整回答
反对 回复 2021-08-17
  • 3 回答
  • 0 关注
  • 190 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信