亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 值?;谏厦娴睦樱蚁雱h除這個數組的任何最小值: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條經驗 獲得超7個贊

您可以通過排序和刪除重復項來使用 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 關注
  • 219 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號