【问题标题】:PDL matrix confusionPDL 矩阵混淆
【发布时间】:2015-12-17 14:45:28
【问题描述】:

我有一个简单但很大的数据文件。它是神经网络模拟的输出。第一列是时间步长,1..200。第二个是目标词(对于当前模拟,1..212)。然后有 212 列,每个单词一个。也就是说,在给定特定目标(输入)词的情况下,每一行都有每个词节点在特定时间步的激活值。

我需要做一些简单的操作,例如将每个激活转换为响应强度(exp(constant x activation)),然后将每个响应强度除以响应强度的行总和。在 R 中执行此操作非常慢(20 分钟),而在 perl 中使用传统循环执行此操作更快但仍然很慢(7 分钟),因为稍后的模拟将涉及数千个单词。

看起来 PDL 应该能够更快地做到这一点。我一直在阅读 PDL 文档,但我真的不知道如何进行第二步。第一个似乎很简单,只需选择激活列并将它们放入 $act 中,然后:

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

但我不知道如何将每个值除以其行总和。任何意见,将不胜感激。

谢谢!

【问题讨论】:

    标签: pdl


    【解决方案1】:

    看起来您需要复制矩阵,然后使用第一个读取,第二个也写入。 注意使用 $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]
    

    【讨论】:

      猜你喜欢
      • 2020-10-01
      • 2012-01-20
      • 2019-11-23
      • 1970-01-01
      • 1970-01-01
      • 2022-07-07
      • 2014-07-09
      • 2018-09-26
      • 2020-02-23
      相关资源
      最近更新 更多