3 回答

TA貢獻1862條經驗 獲得超7個贊
這是一種矢量化(可能是最快的)方法:
arr = np.asarray(listTuples, np.dtype('float,float'))
idx = arr.view(('float',2))[:,1].reshape(-1,4).argmax(1)
arr = arr.reshape(-1,4)[np.arange(len(idx)),idx]
#[(0.05807201, 9.9720125) (2.07897793, 5.7816567) ...]
您基本上使用結構化數組的數組(非結構化)版本,并view沿 查找 Y 的 argmax axis=1。然后使用這些索引來過濾原始數組中的元組arr。

TA貢獻1876條經驗 獲得超6個贊
這應該可以解決你的問題。
輸入:元組列表
輸出:元組列表,取每個 4 個元素塊中 y 值最大的元組 import numpy as np
# List of tuples
listTuples = [(1,1),(120,1000),(12,90),(1,1),(0.05807200929152149, 9.9720125),
(0.34843205574912894, 1.1142874), (0.6387921022067363, 2.0234027),
(0.9291521486643438, 1.4435122), (1.207897793263647, 2.3677678),
(1.4982578397212543, 1.9457655), (1.7886178861788617, 2.8343441),
(2.078977932636469, 5.7816567)]
def extractMaxY(li):
result = []
index = 0
for i in range(0,len(li), 4):
max = -100000
#find the max Y in blocks of 4
for j in range(4):
if li[i+j][1] > max:
max = li[i+j][1]
index = i+j
result.append(li[index])
return result
print(extractMaxY(listTuples))
然后輸出是
[(120, 1000), (0.05807200929152149, 9.9720125), (2.078977932636469,
5.7816567)]
應該如此,對嗎?

TA貢獻1824條經驗 獲得超8個贊
你可以試試這個
import numpy as np
ans = []
for value, comp in zip(x, np.max(x, axis=1)[:,1]):
ans.append([(i, j) for i, j in value if np.isclose(j,comp)])
print(np.array(ans))
將其應用于您的數據
x = np.array([[(0.05807201, 9.97201252), (0.34843206, 1.11428738),
(0.6387921 , 2.02340269), (0.92915215, 1.4435122 )],
[(1.20789779, 2.36776781), (1.49825784, 1.9457655 ),
(1.78861789, 2.83434415), (2.07897793, 5.78165674)],
[(2.36933798, 3.14842606), (2.95005807, 2.10357308),
(3.24041812, 1.15985966), (3.51916376, 2.03056955)]])
退貨
[[[ 0.05807201 9.97201252]]
[[ 2.07897793 5.78165674]]
[[ 2.36933798 3.14842606]]]
添加回答
舉報