- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 AoA 哈希:
$hash{$key} = [
[0.0,1.0,2.0],
10.0,
[1.5,9.5,5.5],
];
$err += (($hash{$key}[0][$_]-$hash{key}[2][$_])*$hash{$key}[1])**2 foreach (0 .. 2);
use strict;
use warnings;
use Time::HiRes qw(time);
my $t1 = time;
my %hash;
my $error = 0;
foreach (0 .. 10000){
$hash{$_} = [
[0.000, 1.000, 2.0000],
10.0,
[1.5,9.5,5.5],
];
foreach my $i (0 .. 2){
$error += (($hash{$_}[0][$i]-$hash{$_}[2][$i])*$hash{$_}[1])**2;
}
}
my $t2 = time;
printf ( "total time: %10.4f error: %10.4f\n", $t2-$t1,$error);
use strict;
use warnings;
use PDL;
use Time::HiRes qw(time);
my $t1 = time;
my %hash;
my $error = 0;
foreach (0 .. 10000){
$hash{$_}[0] = pdl[0.000, 1.000, 2.0000];
$hash{$_}[1] = pdl[10.0];
$hash{$_}[2] = pdl[1.5,9.5,5.5];
my $e = ($hash{$_}[0]-$hash{$_}[2])*$hash{$_}[1];
$error += inner($e,$e);
}
my $t2 = time;
printf ( "total time: %10.4f error: %10.4f\n", $t2-$t1, $error);
最佳答案
PDL 经过优化以处理数组计算。您正在为数据使用散列,但由于键是数字,因此可以根据 PDL 数组对象对其进行重新表述,从而大大提高性能。以下示例代码的所有 PDL 版本运行速度比原始 快约 36 倍无 PDL 代码(比原始 和 PDL 代码快 300 倍)。
所有 PDL
use strict;
use warnings;
use PDL;
use Time::HiRes qw(time);
my $t1 = time;
my %hash;
my $error = 0;
my $pdl0 = zeros(3,10001); # create a [3,10001] pdl
$pdl0 .= pdl[0.000, 1.000, 2.0000];
my $pdl1 = zeros(1,10001); # create a [1,10001] pdl
$pdl1 .= pdl[10.0];
my $pdl2 = zeros(3,10001); # create a [3,10001] pdl
$pdl2 .= pdl[1.5,9.5,5.5];
my $e = ($pdl0 - $pdl2)*$pdl1;
$error = sum($e*$e);
my $t2 = time;
printf ( "total time: %10.4f error: %10.4f\n", $t2-$t1, $error);
见
PDL Book有关使用 PDL 进行计算的深入介绍。
PDL homepage也是所有 PDL 事物的良好起点。
关于perl - 对存储在哈希中的 AoA 进行操作。 PDL 与无 PDL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6400553/
我有一个 AoA 哈希: $hash{$key} = [ [0.0,1.0,2.0], 10.0, [1.5,
我刚开始使用PDL,在文档中看到有两种可能的方式导入PDL的核心功能: use PDL::Core; use PDL::Core ':Internal'; 这里到底有什么区别?该文档对第二种方法进行了
我是 PDL 的新手,请原谅我的基本问题: 我有两个简单的 pdl 对象 pdl> p $a
我有一个二维 pdl,例如: my $data = random(4,4); 我想计算 pdl 上下文之外的 0,0 和 1,0 元素的总和。(不像,例如 $data->slice('0,0') +
我试图用 pdl 将我的 R 代码的一部分翻译成 perl,我想知道 pdl 是否有任何用于创建序列的语法(除了简单的我的 $xx=pdl(1..20)) 就像有一个向量 ['a','b'] rep
我有一个一维 PDL,我想对它的每一半进行计算;即拆分,然后对前半部分进行计算,对后半部分进行相同的计算。 有没有比获取元素数量(使用 nelem)、将其一分为二、然后进行两批切片更简单/更好/优雅的
我已经安装了PDL在 Mac OS X (10.7.3) 机器上。显然 SciPDL 安装程序将 PDL.pm 放在 /Library/Perl/5.12/darwin-thread-multi-2l
我在下面的代码中尝试 Perl 的 PDL: #!/usr/bin/perl -w use strict; use PDL::Core qw(pdl); use PDL::Math qw(isfin
具体来说,我想将 rcols 与 PERLCOLS 选项一起使用。 这是我想要做的: my @array; getColumn(\@array, $file, 4); # get the fourth
假设我有: $a = [ [1, 0, 1] [0, 1, 0] [0, 1, 1] ] 我想提取所有行 $row[2] == 1 .我得到的 piddl
我正在尝试在 Gtk3 应用程序中显示由 PDL(使用 PLplot)生成的图形。当我尝试以下代码时,我发现了两个问题: $pdlImg 不是 GdkPixbuf,所以 new_from_pixbuf
为了测试矩阵算法,我希望能够使用变量而不是数字进行计算,但不更改算法本身。 我认为存在解决方案(但可能还有其他同样受欢迎的解决方案)的方向是在 PDL 中使用多态性或将 PDL 库替换为具有与 PDL
是否有一个优雅的 PDL 函数,它接收一个值列表并返回一个包含 80% 的最低原始值的列表? 例如: 如果我有这样的列表: (9, 4, 1, 2, 7, 8, 3, 5, 6, 10) 在原始列表上
我最接近的是 use PDL; my $u = pdl [1,2,3,4]; my $dim = 4; for(my $i=0; $iflat->index($i), "\n"; } 也因为我可以转换
是否可以在 n 维上执行正则表达式 PDL 多变的? 例如,我可以通过执行将 100 添加到所有元素 $a1 = pdl [1,2]; print $a1 + 100; 但是,如果我的数组是一堆我想对
我想使用 Perl 和 PDL 来实现 3x3 矩阵的旋转(如果可能) 即原始矩阵 [ 1, 2, 3 ] [ 4, 5, 6 ] [ 7, 8, 9 ] 我想旋转,大约 5,所以它成为新的矩阵 [
我有一个非常好的 Perl 子例程,作为 Perl 模块的一部分编写。在不涉及太多细节的情况下,它需要一个字符串和一个短列表作为参数(通常从终端获取)并吐出一个值(现在总是一个浮点,但情况可能并不总是
我是 Moose 的新手并且做得很好,直到我使用 PDL 作为属性遇到了障碍。我希望能够将对象写入文件(我一直在使用 use MooseX::Storage; with Storage('io' =>
我尝试像在 PDL 矩阵或 Vector 数组上做一个 grep: my @toto; push(@toto, pdl(1,2,3)); push(@toto, pdl(4,5,6)); my $ti
我有一个使用 PDL 的函数.最后一步是点积,因此它返回一个标量。但是,当我尝试打印这个标量时,它显然仍然是一个小玩意,并在屏幕上打印如下: [ [ 3 ] ] 我想知道如何将它转换回常规的 Pe
我是一名优秀的程序员,十分优秀!