为了测试矩阵算法,我希望能够用变量来计算,而不仅仅是数字,而不是改变算法本身。
我假设有一个解决方案(但可能还有其他同样受欢迎的解决方案)的方向是在PDL中使用多态性,或者用与PDL相同的API替换PDL库。
为了说明我的观点,下面是一个使用PDL实现的简单算法:
use utf8;
use strict;
use warnings;
use PDL;
sub algorithm ($$) {
my $alpha = shift;
my $beta = shift;
my $A = pdl(
[ cos $alpha, -sin $alpha ],
[ sin $alpha, cos $alpha ],
);
my $B = pdl(
[ cos $beta, -sin $beta ],
[ sin $beta, cos $beta ],
);
print $A x $B;
}现在测试代码,而不是许多调用,如
algorithm 0.1, 0.1;
algorithm 0.2, 0.1;
algorithm 0.1, 0.2;
…使用一个类似于
algorithm 'α', 'β';或者--同样可以接受--类似
algorithm pdl('α'), pdl('β');它最终会在命名变量α和β中输出一个术语矩阵(当然,拉丁变量名称a和b应该是同样可能的)。
理想情况下,算法中没有任何东西需要为此改变;最后,我想测试算法本身,而不是一个不同的算法。在标题中添加一个use PDL::Symbolic qw( pdl );或use SPDL qw( pdl );语句,作为use PDL;的扩展或替换,对于不更改任何内容的规则来说,似乎是一个可以接受的小例外。
我想到的唯一解决方案基本上是重新实现PDL,至少在我的算法中使用的函数不太考虑效率,而是使用一个符号对象而不是每个小单元格,并可能通过索引-命名功能来扩展更大范围内的单元格,以提高可用性。
还有比从头开始编写这个库更好的方法吗?
发布于 2022-03-10 03:25:34
很简短的回答:不。
稍微有帮助的答案是:PDL的全部目的是在计算机内存中(使用“共享内存”模型)以极快的速度对二进制数据(如C或Fortran )进行操作。你描述的是一个完全不同的软件。
https://stackoverflow.com/questions/61628764
复制相似问题