【问题标题】:How to perform cartesian product in PDL如何在 PDL 中执行笛卡尔积
【发布时间】:2018-03-09 12:56:07
【问题描述】:

我想取任意一维向量 a = [k]b = [m] 并形成有序对矩阵 c = [2 xkxm] 这样$c->(:,(i),(j)) = [ $a->(i), $b->(j) ]。 IE。 ab 中所有有序元素对的集合,也就是笛卡尔积。

当然,我可以使用循环和 [glue] 函数来完成此任务,但这不符合 Perl/PDL 的精神。有没有一种涉及切片、虚拟尺寸和胶水的奇特方法可以让我到达那里?

另外,使用 Math::Cartesian::Product (在这里回答:In Perl, how can I get the Cartesian product of multiple sets? 是作弊!:3 我想要直接 perl/PDL 并希望在此过程中学到一些东西。

【问题讨论】:

  • 那么,您尝试过什么?发布您的代码,显示失败的地方,否则您将得不到任何帮助。这不是一个代码编写服务网站。

标签: perl cartesian-product pdl


【解决方案1】:

我得到了符合我标准的东西:

my $a = pdl 1,2,3,4;
my $b = pdl 5,6,7;
print "a = $a\n";
print "b = $b\n";
print "dummy dimensioned:\n";
$a = $a->dummy(0,$b->dim(0));
print "a".$a->shape." = $a\n";

$b = $b->dummy(0, $a->dim(1))->transpose;
print "b".$b->shape." = $b\n";

print "Glued together:\n"
my $c = $a->dummy(0,1)->glue(0, $b->dummy(0,1));
print "c".$c->shape." = $c\n";

a = [1 2 3 4]  
b = [5 6 7]  
dummy dimensioned:  
a[3 4] = 
[
 [1 1 1]
 [2 2 2]
 [3 3 3]
 [4 4 4]
]

b[3 4] = 
[
 [5 6 7]
 [5 6 7]
 [5 6 7]
 [5 6 7]
]  
Glued together:  
c[2 3 4] = [[[1 5][1 6][1 7]][[2 5][2 6][2 7]][[3 5][3 6][3 7]][[4 5][4 6][4 7]]]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-11
    • 2019-04-07
    • 2021-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-15
    相关资源
    最近更新 更多