gpt4 book ai didi

perl - 如何使用 pdl 创建序列?

转载 作者:行者123 更新时间:2023-12-04 22:35:52 24 4
gpt4 key购买 nike

我试图用 pdl 将我的 R 代码的一部分翻译成 perl,我想知道 pdl 是否有任何用于创建序列的语法(除了简单的我的 $xx=pdl(1..20))

就像有一个向量 ['a','b'] rep 20 => a,b,a,b,a,b.... 20 次?
[编辑]:
基本的重复可以用普通的 Perl 重复字符串 x 操作符来完成,但我正在寻找
类似于 R 中的 rep() 和 seq():

[R]
> rep(1:3, each=2, times=3)
1 1 2 2 3 3 1 1 2 2 3 3 1 1 2 2 3 3
> rep(1:4, c(1,2,3,2))
1 2 2 3 3 3 4 4
> seq(0,12,3)
0 3 6 9 12

最佳答案

好吧,我才刚刚开始使用 PDL,但从我所看到和使用的情况来看,似乎 PDL 并不是您制作序列时真正想要的。您最好将 perl 的范围运算符 ( .. ) 与 mapgrepx 的任意组合结合使用。

也就是说,如果你出于某种原因真的决定使用 PDL,你可能可以使用 sequence 函数,然后旋转 piddle 直到它看起来像你想要的:

pdl> p sequence(10)

[0 1 2 3 4 5 6 7 8 9]


pdl> p sequence(2,4) #Slice column 1 for evens, 2 for odds.

[
[0 1]
[2 3]
[4 5]
[6 7]
]


pdl> p sequence(3,4) * 5 #Multiply to step by an amount.

[
[ 0 5 10]
[15 20 25]
[30 35 40]
[45 50 55]
]

您还可以使用切片来抓取列,作为沿着序列步进的一种方式。

对于其他任何事情,例如您在 R 示例中所做的事情,您需要开始发挥创意:
pdl> p $a = (yvals zeroes(2,3))+1

[
[1 1]
[2 2]
[3 3]
]

pdl> p pdl($a,$a,$a)->flat #-> rep(1:3, each=2, times=3)
[1 1 2 2 3 3 1 1 2 2 3 3 1 1 2 2 3 3]

(如果我知道如何更轻松地复制矩阵,上面的内容会更短)
[编辑] 使用 dummy 似乎很容易做到! $a = (zeroes(2,3)->yvals + 1)->dummy(2,3)->flat
再说一次,除非您有特殊需要,否则我认为最好使用 perl 来制作您的序列。

[编辑]这是你的方法:
请注意,' x ' 不仅仅是一个字符串乘法器,它还可以乘以列表。您需要在 var 周围显式使用括号来通知 perl x 正在列表中使用。
#> rep(1:3, each=2, times=3)
my @s = map {($_) x 2} (1..3) x 3;

#> seq(0,12,3)
my @s = map {$_ * 3} 0..12/3;

#> rep(1:4, c(1,2,3,2))
#Ewww. So you basically want to multiply one list by another list.
#Here's one way to do it:
use List::MoreUtils qw(pairwise);
my @s = &pairwise(sub {($a) x $b}, [1..4], [1,2,3,2])

关于perl - 如何使用 pdl 创建序列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6627492/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com