我有以下向量Vec
:
ACGTTGCA
并希望将其划分为嵌套向量,其中在i-iith位置将有Vec
长度为4的子段,从{{1}的第i个位置开始}}
例如,Vec
返回:
Vec[(⍳¯3+⍴Vec)∘.+¯1+⍳4]
但上面输出的问题是它是一个字符矩阵,而我想获得以下输出:
ACGT
CGTT
GTTG
TTGC
TGCA
对于以下字符串:
┌──────────────────────────┐
│┌────┬────┬────┬────┬────┐│
││ACGT│CGTT│GTTG│TTGC│TGCA││
│└────┴────┴────┴────┴────┘│
└──────────────────────────┘
我正在寻找的正确结果将是:
vec←'Hy, only testing segmenting vec into pieces of 4'
此外,有没有办法将此类矢量转换为单个矢量,后续行中将包含4个字符?
示例:对于┌→────────────────────────────────────────┐
│ ┌→───┐ ┌→───┐ ┌→───┐ ┌→───┐ │
│ │Hy, │ │y, o│ │, on│ │ onl│ (and so on) │
│ └────┘ └────┘ └────┘ └────┘ │
└∊────────────────────────────────────────┘
字符向量,结果为:
foobartesting
答案 0 :(得分:3)
要回到原来的问题:你只需要添加一个领先的"分裂" (↓)将矩阵结果转换为您正在寻找的向量向量。请注意,虽然它可能不那么优雅,但经典"基于生成索引矩阵的解决方案可能更有效,因为特定窗口缩减不在大多数APL解释器优化的案例列表上。
在英特尔酷睿i5 @ 1.60Ghz上运行的Dyalog APL v14.0 / 64中:
X←' foobartesting'
(4,/ x)在大约9.3微秒内执行
(↓4 {⍵[(0,⍳-⍺-⍴⍵)∘。+⍳⍺]} x)时钟在2.3左右
随着向量长度的增加,效率差距增大;当你达到一个长度为10,000的参数时,窗口减少几乎慢了10倍(7对0.7毫秒)。
在Dyalog APL中,"经典"通过1字节和2字节整数类型的可用性增强了方法;如果您使用其他APL口译员,您的里程可能会有所不同。
答案 1 :(得分:2)
这是在GNU APL中测试的,但我不认为这在Dyalog中应该有所不同。我的解决方案就像这样简单:
4 ,/ 'foobartesting'
foob ooba obar bart arte rtes test esti stin ting
答案 2 :(得分:0)
我不确定我是否理解你的描述。 但我明白的是,你有一个载体:
vec←'Hy, only testing segmenting vec into pieces of 4'
哦,此外,我们需要为此执行分配迁移级别; - )
⎕ml←3
理解问题后修改答案;-):
display 4{⍺↑¨(0,⍳(⍴⍵)-⍺)↓¨⊂⍵}'ACGTTGCA'
┌→───────────────────────────────────┐
│ ┌→───┐ ┌→───┐ ┌→───┐ ┌→───┐ ┌→───┐ │
│ │ACGT│ │CGTT│ │GTTG│ │TTGC│ │TGCA│ │
│ └────┘ └────┘ └────┘ └────┘ └────┘ │
└∊───────────────────────────────────┘