Re: [問題] python numpy 向量化

看板Python作者 (小邱)時間4年前 (2020/05/10 21:26), 編輯推噓1(100)
留言1則, 1人參與, 4年前最新討論串2/2 (看更多)
如果你np.cumsum(A)沒有溢位問題, 可以試試這個, 我試了一下, 用np.vectorize似乎可行, 代碼如下, 看看是不是你要的意思, 其中邊界問題你再自己修一下 因為我不清楚你的B[i]~B[i+1]包不包含邊界值 核心概念就是我只對A做一次np.cumsum令為C *** 每一區段減掉上一次區段最後的值就是當區段的cumsum *** import numpy as np A = np.array([1,-2,3,-4,5,-6,7,-8]*int(1e2)) # 超長Array A B = np.array([2, 4, 6, 7, 10, 13]) B_starts = B[:-1] B_ends = B[1:] C = np.cumsum(A[:(B[-1]+1)]) # cumsum只要做一次就好, 但做到max(B)就夠了 C = np.append(0, C) # 放一個假的"上區段最後值=0" print('Lengths: A[{}], B[{}], B_starts[{}], B_ends[{}], C[{}]'.format( len(A), len(B), len(B_starts), len(B_ends), len(C))) def judge(start, end): """每一段的評估""" return np.any(C[start:end] - C[start-1] < 0) vec_func = np.vectorize(judge, cache=True) output = vec_func(start=B_starts+1, end=B_ends+1) %timeit vec_func(start=B_starts+1, end=B_ends+1) assert len(output) == len(B) - 1 assert output[0] == True assert output[1] == True assert output[2] == False -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.165.73.63 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1589117213.A.BB9.html

05/13 21:56, 4年前 , 1F
跟我要的東西一樣!解謝大大
05/13 21:56, 1F
文章代碼(AID): #1Uk04Tkv (Python)
文章代碼(AID): #1Uk04Tkv (Python)