首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对于不执行pdl( map {} unpdl)的PDL是否有等价的map()?

对于不执行pdl( map {} unpdl)的PDL是否有等价的map()?
EN

Stack Overflow用户
提问于 2022-06-12 04:05:42
回答 1查看 52关注 0票数 2

我想这样做,以便对现有PDL上的每个元素调用myfunc()。

代码语言:javascript
复制
$pdl = pdl [1,2,3];
$pdl = pdl [ map { myfunc($_) } @{ unpdl($pdl) } ];

我已经搜索过这些文档,但还没有:

是否有方法访问PDL的每个元素并在元素上运行某些内容?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-12 05:24:14

为此,可以使用broadcast_define (旧版本中的thread_define):

代码语言:javascript
复制
use PDL;

broadcast_define('square(a();[o]b())', over { $_[1] .= $_[0] ** 2 });

my $pdl = pdl [[1,2,3], [4,5,6]];
square($pdl, (my $out = null));
print($out); # $out is pdl [[1,4,9], [16,25,36]]

这比使用本机操作要慢(在本例中,unpdl/map/pdl.得到的结果是相同的,通过编写本机操作可以实现许多更复杂的事情),或者PDL::PP,在PDL::PP中用C编写函数,但速度比$pdl**2快。

您必须查看PDL::PP文档,以获得类似于(a();[o]b())的签名说明,但这是一个简单的情况:函数有标量输入和标量输出,并且可以广播到任意数量的维度。

当省略输出参数时,我似乎无法让broadcast_defined函数返回一个值(例如my $out = square($pdl)),但是您可以使用square($pdl, $pdl)进行就地修改。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72589417

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档