我想做這樣的事情來在現有PDL上就地呼叫每個元素上的 myfunc() :
$pdl = pdl [1,2,3];
$pdl = pdl [ map { myfunc($_) } @{ unpdl($pdl) } ];
我已經搜索了檔案,但還沒有:
有沒有辦法訪問 PDL 的每個元素并在元素上運行某些東西?
uj5u.com熱心網友回復:
您可以使用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在這種情況下得到相同的結果,并且通過組合本機操作可以實作許多更復雜的事情)或使用 C 撰寫函式的PDL::PP慢,但它比unpdl/ map/ pdl。
您必須查看 PDL::PP 檔案以了解類似簽名的解釋(a();[o]b()),但這是簡單的情況:該函式具有標量輸入和標量輸出,并且可以廣播到任意數量的維度。
當省略輸出引數(例如 )時,我似乎無法讓broadcast_defined 函式回傳一個值my $out = square($pdl),但是您可以使用square($pdl, $pdl).
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/489479.html
上一篇:perl中如何匹配多個專案
