Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对PERL PDL变量执行正则表达式_Perl_Pdl - Fatal编程技术网

对PERL PDL变量执行正则表达式

对PERL PDL变量执行正则表达式,perl,pdl,Perl,Pdl,是否可以对n维变量执行正则表达式 例如,我可以通过执行以下操作向所有元素添加100 $a1 = pdl [1,2]; print $a1 + 100; 但是,如果我的数组是一组字符串,我想对其执行一些任务,该怎么办呢。例如,此操作失败: $a = pdl ['suze','david']; $a =~ s/suze/female/; print $a; 不确定这是否可能,但请提前感谢 重点是,这是一个perl扩展,专为科学和批量数字数据处理和显示而设计。所以它并不是专门用来操纵字符串的。当

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

例如,我可以通过执行以下操作向所有元素添加100

$a1 = pdl [1,2]; 
print $a1 + 100;
但是,如果我的数组是一组字符串,我想对其执行一些任务,该怎么办呢。例如,此操作失败:

$a = pdl ['suze','david'];
$a =~ s/suze/female/;
print $a;
不确定这是否可能,但请提前感谢

重点是,这是一个perl扩展,专为科学和批量数字数据处理和显示而设计。所以它并不是专门用来操纵字符串的。当您尝试在一个琐事中迭代时:

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.
对于构造函数和
STRING

pdl的字符串版本还允许您使用字符串badinfnan,它将插入您想要的值(如果您使用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'
        ];

作为Paulchenkiller答案的后续,PDL对字符串via有基本的支持。但是,PDL::Char数组中的每个字符串必须具有相同的长度,或者填充为null。您的示例将第一个条目的长度更改为比以前分配的长度更长的长度。这是无法对PDL::Char应用正则表达式的原因之一


此外,Perl的字符串几乎没有多余的内存,在数组中的元素上循环,当您将正则表达式应用于数组的每个成员时,成本应该不会太高。

我认为PDL中没有正则表达式。我认为您必须将PDL数组转换为perl数组,然后进行正则表达式替换。为什么要对字符串使用
PDL
它不是为这个而设计的:PCool,甚至不知道这个附加组件存在:D
$VAR1 = [
          'female',
          'david'
        ];