簡體   English   中英

如何在PDL中執行笛卡爾積

[英]How to perform cartesian product in PDL

我想取一個任意的一維向量a = [k]b = [m]並形成有序對矩陣c = [2 xkxm]使得$c->(:,(i),(j)) = [ $a->(i), $b->(j) ] ab (即笛卡爾積)中所有有序元素對的集合。

當然,我可以使用循環和[glue]函數來完成此操作,但這與Perl / PDL的精神不同。 是否有一種花哨的方法,涉及切片,虛擬尺寸和膠水,使我到達那里?

另外,使用Math :: Cartesian :: Product(如此處所回答: 在Perl中,我怎么能得到多套的笛卡爾積?是作弊的!:3我想要直接的perl / PDL,並希望在此過程中學到一些東西。

我得到的東西符合我的標准:

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]]]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM