亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

如何在 Python 中更快地找到大矩陣的點積(但結果會是中等大?。??

我有一個 500×40K 的矩陣A和一個 40K 元素的向量q,形式為 numpy 數組。據估計,計算它們的點積需要 16 分鐘A.dot(q)。因為q我需要用 50K 來做這個計算(很多),我想盡可能地減少計算時間。計算Aand的點積q或更好的方法是A更有效的更好的方法Q嗎?Scipy似乎為此提供了一個解決方案,但我不太明白我應該如何在這里解決我的問題。有人可以幫我嗎?from time import process_timet1 = process_time()A[0,:].dot(q)t2 = process_time()print("Estimated Total Time:", (t2-t1)*A.shape[0]/60)
查看完整描述

2 回答

?
富國滬深

TA貢獻1790條經驗 獲得超9個贊

這是您可以執行的操作的示例:

Q = np.hstack((q1, q2, q3, q4, ...))
B = np.dot(A, Q)

在輸出中,( ) 列i是和的乘積。即使對于您所需的數組大小,這也應該相當快。它甚至不應該像你提到的那樣花很長時間,可能在一分鐘左右的時間內。BB[:,i]Aq_i


查看完整回答
反對 回復 2022-11-01
?
動漫人物

TA貢獻1815條經驗 獲得超10個贊

如果您有足夠A的內存來保存所有q向量,那么如果您將所有q向量放入一個數組Q并調用A.dot(Q).


這是在配備 2.6 GHz Intel Core i7 和 16 GB 內存的筆記本電腦上。我正在使用交互式 Python shell ipython:


In [1]: import numpy as np


In [2]: rng = np.random.default_rng()


In [3]: A = rng.normal(size=(500, 40_000)).astype(np.float32)


In [4]: Q = np.ones((40_000, 50_000), dtype=np.float32)


In [5]: %timeit A.dot(Q)

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

那不到 8 秒——與 16 分鐘相差甚遠!


如果您沒有足夠的內存,則可能需要更長的時間,因為操作系統可能會開始將內存換出到磁盤。


查看完整回答
反對 回復 2022-11-01
  • 2 回答
  • 0 關注
  • 140 瀏覽
慕課專欄
更多

添加回答

了解更多

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號