2015-09-21 194 views
0

我有一個簡單但很大的數據文件。它是從神經網絡模擬輸出的。第一列是時間步長,1..200。第二個是目標詞(對於當前的模擬,1..212)。然後有212列,每個單詞一個。也就是說,在給定特定目標(輸入)字的特定時間步,每行具有每個字節點的激活值。PDL矩陣混淆

我需要做簡單的操作,例如將每個激活轉換爲響應強度(exp(常量x激活)),然後將每個響應強度除以響應強度的行和。在R中執行此操作非常慢(20分鐘),並且在perl中使用傳統循環執行操作速度較快,但仍然很慢(7分鐘),因爲後面的模擬將涉及數千個單詞。

好像PDL應該能夠更快地做到這一點。我一直在閱讀PDL文檔,但是我對如何完成第二步非常遺憾。第一個看起來就像選擇激活列並將它們放在$ act中一樣簡單,然後:

$ rp = exp($ act * $ k);

但我無法弄清楚如何然後除以它的行總和的每個值。任何意見,將不勝感激。

謝謝!

回答

0

看起來您需要製作矩陣的副本,然後使用第一個讀取,第二個寫入。 注意使用$ C++而不是for $ loop(){可能更高效! }

$x = sequence(3,3)*2+1; 
[ 1 3 5] 
[ 7 9 11] 
[13 15 17] 
$y .= $x; # if you use = here it will change both x and y 
for $c(0..2) { for $d(0..2) { $y($c,$d) .= $y($c,$d)/sum($x(,$d)) }} 
p $y; 
    [0.11111111 0.33333333 0.55555556] 
    [0.25925926 0.33333333 0.40740741] 
    [0.28888889 0.33333333 0.37777778]