第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

在2D數(shù)組中查找最高元素的列表:Python 3

在2D數(shù)組中查找最高元素的列表:Python 3

拉風(fēng)的咖菲貓 2021-04-09 18:11:37
我有一個尺寸為(640X480)的2D尺寸,例如:[[1.2 , 9.5 , 4.8 , 1.7], [5.5 , 8.1 , 7.6 , 7.1], [1.4 , 6.9 , 7.8 , 2.2]]     (this is a sample of a 4X3 array)我必須以最快的方式找到數(shù)組中的前100個(或N個)最大值。因此,我需要花費(fèi)最少處理時間的最優(yōu)化的代碼。由于它是一個巨大的數(shù)組,如果我僅檢查每個第二個元素或每個第三或第四個元素,那就很好了。算法的輸出應(yīng)該是一個元組列表,每個元組都是高值元素的2D索引。例如,9.5的索引為(0,1)我找到了一個解決方案,但是它太慢了:indexes=[]for i in range(100):    highest=-1    highindex=0.1    for indi,i in enumerate(array):        for indj,j in enumerate(i):            if j>highest and not((indi,indj) in indexes):                highest= j                highindex=(indi,indj)    indexes.append(highindex)
查看完整描述

2 回答

?
斯蒂芬大帝

TA貢獻(xiàn)1827條經(jīng)驗 獲得超8個贊


numpy.argpartition,numpy.unravel_index和numpy.column_stack套路:


測試ndarrayarr是改組數(shù)組值0到99形狀的(11, 9)。

假設(shè)我們要查找前7個最大值的2d索引列表:


In [1018]: arr

Out[1018]: 

array([[36, 37, 38, 39, 40, 41, 42, 43, 44],

       [27, 28, 29, 30, 31, 32, 33, 34, 35],

       [72, 73, 74, 75, 76, 77, 78, 79, 80],

       [ 0,  1,  2,  3,  4,  5,  6,  7,  8],

       [18, 19, 20, 21, 22, 23, 24, 25, 26],

       [45, 46, 47, 48, 49, 50, 51, 52, 53],

       [ 9, 10, 11, 12, 13, 14, 15, 16, 17],

       [90, 91, 92, 93, 94, 95, 96, 97, 98],

       [54, 55, 56, 57, 58, 59, 60, 61, 62],

       [63, 64, 65, 66, 67, 68, 69, 70, 71],

       [81, 82, 83, 84, 85, 86, 87, 88, 89]])


In [1019]: top_N = 7


In [1020]: idx = np.argpartition(arr, arr.size - top_N, axis=None)[-top_N:]


In [1021]: result = np.column_stack(np.unravel_index(idx, arr.shape))


In [1022]: result

Out[1022]: 

array([[7, 2],

       [7, 3],

       [7, 4],

       [7, 5],

       [7, 7],

       [7, 8],

       [7, 6]])


查看完整回答
反對 回復(fù) 2021-04-20
?
回首憶惘然

TA貢獻(xiàn)1847條經(jīng)驗 獲得超11個贊

這是我想到的解決方案,希望它可以足夠快地滿足您的需求。


num_list = [

    [1.2, 9.5, 4.8, 1.7],

    [5.5, 8.1, 7.6, 7.1],

    [5.5, 9.6, 7.6, 7.1],

    [5.5, 8.1, 4.5, 7.1],

    [1.4, 6.9, 7.8, 12.2]

]


needed_highest = 5 # This is where your 100 would go

highest = [-1] * needed_highest

result = [-1] * needed_highest


for y in range(0, len(num_list)):

    for x in range(0, len(num_list[y])):

        num = num_list[y][x]

        min_index = highest.index(min(highest))

        min_value = highest[min_index]

        if min_value < num:

            highest[min_index] = num

            result[min_index] = (x, y)

print(result)

結(jié)果沒有以任何方式排序,但是如果需要的話,應(yīng)該不難實現(xiàn)。


查看完整回答
反對 回復(fù) 2021-04-20
  • 2 回答
  • 0 關(guān)注
  • 185 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號