我需要在兩個維度上切分中等大小的2d Numpy陣列。作爲實例,加速Numpy陣列切片
import numpy as np
X = np.random.normal(loc=0, scale=1, size=(3000, 100))
從該陣列中,我需要選擇大量的行和相當小數量的列,例如
row_idx = np.random.random_integers(0, 2999, 2500)
col_idx = np.random.random_integers(0, 99, 10)
現在,我這樣做是通過以下命令:
X.take(col_idx, axis=1).take(row_idx, axis=0)
這需要我的電腦上大約115μs。問題是我需要每次運行數百萬次執行此步驟。
你是否看到有機會加速這個速度?
編輯(附加信息): 我有一個矩陣X是nxk。這n行包含1xk向量。 有三組:活動組(V),左組(L)和右組(R)。此外,還有係數v0和v。我需要計算此數量:http://goo.gl/KNoSl3(對不起,我無法發佈圖像)。問題中的公式選擇左(右)集中的所有X行以及活動集中的所有列。
編輯2
我發現了另一個小的改進。
X.take(col_idx, axis=1, mode='clip').take(row_idx, axis=0, mode='clip')
有點快(我的機器上大概是25%)。
'take()'方法需要將所選行復制一列。你應該調整你的算法來製作這個不需要的東西。我們無法告訴你如何在沒有進一步的背景下做到這一點。 –
你的指數多久改變一次? – Daniel
對於幾十個觀察值,行索引保持不變(更確切地說:我有k個變量,這些變量分爲活動集和非活動集,我需要檢查哪個變量是非活動集最合適 - 即行索引保持不變不變,只要我檢查非活動集中的變量) – BayerSe