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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

在 NumPy ndArray 中基于布爾值查找最長(zhǎng)序列的更有效解決方案

在 NumPy ndArray 中基于布爾值查找最長(zhǎng)序列的更有效解決方案

有只小跳蛙 2021-09-28 20:59:22
我搜索我的 ndArray 以查找基于 True 值的最長(zhǎng)系列。是否可以選擇在不遍歷數(shù)組的情況下查找最長(zhǎng)系列?我已經(jīng)用 numpy.nonzero 編寫了自己的解決方案,但可能有更好的解決方案。import numpy as nparr = np.array([[[1,2,3,4,5],                [6,7,8,9,10],                [11,12,13,14,15],                [16,17,18,19,20],                [21,22,23,24,25]],                [[True,True,True,False,True],                [True,True,True,True,False],                [True,True,False,True,True],                [True,True,True,False,True],                [True,True,True,False,True]]])def getIndices(arr):    arr_to_search = np.nonzero(arr)    arrs = []    prev_el0 = 0    prev_el1 = -1    activ_long = []    for i in range(len(arr_to_search[0])):        if arr_to_search[0][i] == prev_el0:            if arr_to_search[1][i] != prev_el1 + 1:                arrs.append(activ_long)                activ_long = []        else:            arrs.append(activ_long)            activ_long = []        activ_long.append((arr_to_search[0][i],arr_to_search[1][i]))        prev_el0 = arr_to_search[0][i]        prev_el1 = arr_to_search[1][i]    max_len = len(max(arrs,key=len))    longest_arr_list = [a for a in arrs if len(a) == max_len]    return longest_arr_listprint(getIndices(arr[1,:,:]))print(getIndices(arr[1,:,:].T))[[(1, 0), (1, 1), (1, 2), (1, 3)]][[(0, 0), (0, 1), (0, 2), (0, 3), (0, 4)], [(1, 0), (1, 1), (1, 2), (1, 3), (1, 4)]]
查看完整描述

1 回答

?
叮當(dāng)貓咪

TA貢獻(xiàn)1776條經(jīng)驗(yàn) 獲得超12個(gè)贊

這是一個(gè) numpy 解決方案,它避免了基于上一個(gè)問題的顯式循環(huán)。


我假設(shè)布爾數(shù)組名為a. 本質(zhì)上,我們找到行從 0 到 1 或從 1 到 0 變化的索引,并查看它們之間的差異。通過在前后填充 0,我們確保對(duì)于從 0 到 1 的每個(gè)轉(zhuǎn)換,還有另一個(gè)從 1 到 0 的轉(zhuǎn)換。


為了方便我處理a,并a.T在同一時(shí)間,但你可以分開,如果你想要做他們。


m,n = a.shape

A = np.zeros((2*m,n+2))

A[:m,1:-1] = a

A[m:,1:-1] = a.T


dA = np.diff(A)


start = np.where(dA>0)

end = np.where(dA<0)


argmax_run = np.argmax(end[1]-start[1])


row = start[0][argmax_run]

col_start = start[1][argmax_run]

col_end= end[1][argmax_run]-1


max_len = col_end - col_start + 1


print('max run of length {}'.format(max_len))

print('in '+('row' if row<m else'col')+' {}'.format(row%m)+' from '+('col' if row<m else'row')+' {} to {}'.format(col_start,col_end))

為了提高性能和存儲(chǔ),我們可以更改A為布爾數(shù)組。由于-1和1在dA上面總是成對(duì)出現(xiàn),我們可以找到start和end如下。


nz = np.nonzero(dA)

start = (nz[0][::2], nz[1][::2])

end = (nz[0][1::2], nz[1][1::2])

請(qǐng)注意,您可以然后完全刪除變量start,end因?yàn)樗鼈儾⒉皇钦嬲枰摹?/p>


查看完整回答
反對(duì) 回復(fù) 2021-09-28
  • 1 回答
  • 0 關(guān)注
  • 229 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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