假設我有一個由一堆坐標 [x, y] 組成的 Numpy 陣列。我想過濾這個陣列。
對于陣列中具有相同 x 值的所有坐標,我只想保留一個坐標:
y 最大值的坐標。
執行此操作的最有效或 Pythonic 方法是什么。我將在下面舉例說明。
coord_arr= array([[10,5], [11,6], [12,6], [10,1], [11,0],[12,2]])
[10, 5] 和 [10,1] 具有相同的 x 值:x=10
y 值的最大值:
max(5,1) = 5
所以我只保留坐標 [10,5]
x=11 和 x=12 的程式相同
所以我最終得到:
filtered_coord_arr= array([[10,5],[11,6],[12,6]])
我有一個解決方案,可以轉換為串列并使用串列理解(見下文)。
但我正在尋找一種更高效、更優雅的解決方案。
(實際陣列比本例中的陣列大得多。)
我的解決方案:
coord_list = coord_arr.tolist()
x_set = set([coord[0] for coord in coord_list])
coord_max_y_list= []
for x in x_set:
compare_list=[coord for coord in coord_list if coord[0]==x]
coord_max = compare_list[compare_list.index(max([coord[1] for coord[1] in compare_list]))]
coord_max_y_list.append(coord_max)
filtered_coord_arr= np.array(coord_max_y_list)
uj5u.com熱心網友回復:
如果你的陣列很小,你可以只做一行:
np.array([[x, max(coord[coord[:,0] == x][:,1])] for x in set(coord[:,0])])
然而,這不是正確的復雜性,如果陣列很大并且您關心正確的復雜性,請這樣做:
d = {}
for x, y in coord:
d[x] = max(d.get(x, float('-Inf')), y)
np.array([[x, y] for x,y in d.items()])
uj5u.com熱心網友回復:
您可以參考以下答案:
解決方案 :
coord_arr= np.array([[10, 5], [11, 6], [12, 6], [13,7], [10,1], [10,7],[12,2], [13,0]])
df = pd.DataFrame(coord_arr,columns=['a','b'])
df = df.groupby(['a']).agg({'b': ['max']})
df.columns = ['b']
df = df.reset_index()
filtered_coord_arr = np.array(df)
filtered_coord_arr
輸出 :
array([[10, 7],
[11, 6],
[12, 6],
[13, 7]], dtype=int64)
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/534916.html
上一篇:如何將陣列轉換為串列中的浮點數
