是否可以对n维PDL变量执行正则表达式?

例如,我可以通过将所有元素加100

$a1 = pdl [1,2];
print $a1 + 100;


但是,如果我的数组是一串我想对其执行某些任务的字符串,该怎么办?例如,这失败了:

$a = pdl ['suze','david'];
$a =~ s/suze/female/;
print $a;


不知道这是否有可能,但在此先感谢。

最佳答案

关键是,PDL是perl扩展,旨在用于科学和批量数字数据处理和显示。因此,它并不是String操作的真正原因。当您尝试反复进行时:

use strict;
use warnings;
use PDL;

my $a = pdl ['suze','david'];
print $_ . "\n" foreach ($a->list);


你会得到:

Argument "suze" isn't numeric in subroutine entry at Basic/Core/Core.pm.PL (i.e. PDL::Core.pm) line 1296, <DATA> line 207.
0
0
Argument "david" isn't numeric in subroutine entry at Basic/Core/Core.pm.PL (i.e. PDL::Core.pm) line 1296, <DATA> line 207.


深入了解POD时,您会发现:

$a = pdl(SCALAR|ARRAY REFERENCE|ARRAY|STRING);


对于构造函数及其后的STRING文本


pdl的字符串版本还允许您使用字符串bad,inf和nan,并且它将插入您要表示的值(如果使用bad,则设置bad标志)。您可以混合并匹配大小写,尽管不应这样做。


回到您的主要问题,为什么对字符串使用PDL? -为什么不使用简单的数组?

use strict;
use warnings;
use Data::Dumper;

my $a = ['suze','david'];
s/suze/female/ for @{$a};
print Dumper $a;


输出:

$VAR1 = [
          'female',
          'david'
        ];

10-07 12:53