簡體   English   中英

在不執行 pdl( map {} unpdl) 的情況下,是否有等效於 PDL 的 map()?

[英]Is there a map() equivalent for PDL without doing pdl( map {} unpdl)?

我想做這樣的事情來在現有PDL的每個元素上就地調用 myfunc() :

$pdl = pdl [1,2,3];
$pdl = pdl [ map { myfunc($_) } @{ unpdl($pdl) } ];

我已經搜索了文檔,但還沒有:

有沒有辦法訪問 PDL 的每個元素並在元素上運行某些東西?

您可以為此使用broadcast_define (舊版本中的thread_define ):

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]]

這比使用本機操作要慢( $pdl**2在這種情況下得到相同的結果,並且通過組合本機操作可以實現更復雜的事情),或PDL::PP ,您在其中將 function 寫入 C,但是它比unpdl / map / pdl更快。

您必須查看 PDL::PP 文檔以了解對(a();[o]b())等簽名的解釋,但這是簡單的情況:function 有一個標量輸入和一個標量 output,並且可以廣播到任意數量的維度。

當省略 output 參數時,我似乎無法讓broadcast_define d 函數返回一個值(例如my $out = square($pdl) ),但您可以使用square($pdl, $pdl)進行就地修改.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM