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

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

矩陣向量差的有效元素 argmin

矩陣向量差的有效元素 argmin

臨摹微笑 2024-01-04 17:22:08
假設(shè)一個數(shù)組a.shape == (N, M)和一個向量v.shape == (N,)。目標(biāo)是計算argmin從每個元素中減去abs的- 也就是說,vaout = np.zeros(N, M)for i in range(N):    for j in range(M):        out[i, j] = np.argmin(np.abs(a[i, j] - v))我通過進(jìn)行了矢量化實現(xiàn)np.matlib.repmat,它速度更快,但需要O(M*N^2)內(nèi)存,這在實踐中是不可接受的。計算仍然在 CPU 上完成,因此最好的選擇似乎是在 C 中實現(xiàn) for 循環(huán)作為擴(kuò)展,但也許 Numpy 已經(jīng)實現(xiàn)了這種邏輯??梢??有任何可用的 Numpy 函數(shù)可以有效地實現(xiàn)上述功能嗎?
查看完整描述

1 回答

?
素胚勾勒不出你

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

受到 的啟發(fā)this post,我們可以利用np.searchsorted-

def find_closest(a, v):

? ? sidx = v.argsort()

? ? v_s = v[sidx]

? ? idx = np.searchsorted(v_s, a)

? ? idx[idx==len(v)] = len(v)-1

? ? idx0 = (idx-1).clip(min=0)

? ??

? ? m = np.abs(a-v_s[idx]) >= np.abs(v_s[idx0]-a)

? ? m[idx==0] = 0

? ? idx[m] -= 1

? ? out = sidx[idx]

? ? return out

更多性能。numexpr在大型數(shù)據(jù)集上進(jìn)行提升:


import numexpr as ne


def find_closest_v2(a, v):

? ? sidx = v.argsort()

? ? v_s = v[sidx]

? ? idx = np.searchsorted(v_s, a)

? ? idx[idx==len(v)] = len(v)-1

? ? idx0 = (idx-1).clip(min=0)

? ??

? ? p1 = v_s[idx]

? ? p2 = v_s[idx0]

? ? m = ne.evaluate('(idx!=0) & (abs(a-p1) >= abs(p2-a))', {'p1':p1, 'p2':p2, 'idx':idx})

? ? idx[m] -= 1

? ? out = sidx[idx]

? ? return out

時間安排


設(shè)置 :


N,M = 500,100000

a = np.random.rand(N,M)

v = np.random.rand(N)


In [22]: %timeit find_closest_v2(a, v)

4.35 s ± 21.1 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)


In [23]: %timeit find_closest(a, v)

4.69 s ± 173 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)


查看完整回答
反對 回復(fù) 2024-01-04
  • 1 回答
  • 0 關(guān)注
  • 186 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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