【问题标题】:How to iterate through a Perl PDL piddle?如何遍历 Perl PDL piddle?
【发布时间】:2011-08-18 21:43:06
【问题描述】:

我最接近的是类似的东西

use PDL;
my $u = pdl [1,2,3,4];
my $dim = 4;
for(my $i=0; $i<$dim; $i++)
{
  print $u->flat->index($i), "\n";
}

我也可以将[1,2,3,4] 转换为piddle $u,我可以从$u 取回一个列表(或矩阵的列表列表)吗?

【问题讨论】:

    标签: perl pdl


    【解决方案1】:

    凭借僧侣们的智慧,我找到了答案: http://perlmonks.org/index.pl?node_id=892201

    我想我会在我原来的问题中分享它。 上面的代码可以改写为:

    use PDL;
    my $u = pdl [1,2,3,4];
    foreach ($u->dog)
    {
      print $_, "\n";
    }
    

    智慧附带了一个免责声明,即dog() 仅适用于小谜题(对象)。

    【讨论】:

    • dog 可以使用的内容没有限制。我会说,如果您正在考虑循环使用 PDL ndarray,您可能应该重新考虑以“矢量化”方式做您正在做的事情。
    【解决方案2】:

    除了使用 dog 之外,这里还有两个使用 index 和 list 的 1d pdl 选项。还有 index2d

    use PDL;
    my $a = pdl(1 .. 4);
    #use index
    print $a->index($_), "\n" foreach (0 .. $a->nelem-1);
    #use list
    print $_ . "\n" foreach ($a->list);
    

    【讨论】:

    • 我会使用$a-&gt;at($_)$a-&gt;sclr($_)index 方法返回一个单项 PDL 对象,而 atsclr 返回一个 Perl 标量。此外,sclrat 更宽容。
    猜你喜欢
    • 2016-08-19
    • 2012-02-19
    • 2017-09-06
    • 2021-11-26
    • 2012-08-25
    • 1970-01-01
    • 2016-09-16
    • 2019-11-17
    • 2012-04-13
    相关资源
    最近更新 更多