在 APL 中使用嵌套向量进行索引
Indexing with nested vectors in APL
我有一个包含一些索引的向量向量,以及一个我想在其上使用它们的字符向量。
A←(1 2 3)(3 2 1)
B←'ABC'
我试过:
B[A]
RANK ERROR
B[A]
∧
A⌷B
LENGTH ERROR
A⌷B
∧
和
A⌷B
LENGTH ERROR
A⌷¨B
∧
我愿意
┌→────────────┐
│ ┌→──┐ ┌→──┐ │
│ │ABC│ │CBA│ │
│ └───┘ └───┘ │
└∊────────────┘
将被退回,但如果我需要寻找其他方式,请告诉我。
来自数组的index function ⌷
is a bit odd. To select multiple major cells,需要将数组的索引括起来:
(⊂3 2 1)⌷'ABC'
CBA
为了使用两个索引向量中的每一个,您要从中选择的数组需要分布在这两个向量中。您可以为此使用 APL 的标量扩展,但是您要从中选择的数组需要打包为标量:
(⊂1 2 3)(⊂3 2 1)⌷¨⊂'ABC'
┌→────────────┐
│ ┌→──┐ ┌→──┐ │
│ │ABC│ │CBA│ │
│ └───┘ └───┘ │
└∊────────────┘
所以要使用你的变量:
A←(1 2 3)(3 2 1)
B←'ABC'
(⊂¨A)⌷¨⊂B
┌→────────────┐
│ ┌→──┐ ┌→──┐ │
│ │ABC│ │CBA│ │
│ └───┘ └───┘ │
└∊────────────┘
请注意,如果您要生成长度相同的排列,最好避免使用嵌套数组。嵌套数组强制系统遵循指针,而简单数组允许顺序访问密集数据。当然,这只有在您拥有大量数据时才真正重要:
⎕←SIMPLE←↑A ⍝ A 2×3 matrix of indices
1 2 3
3 2 1
(⊂SIMPLE)⌷B
ABC
CBA
B[SIMPLE] ⍝ IMHO bracket indexing is nicer for this
ABC
CBA
↓B[SIMPLE] ⍝ Split if you must
┌───┬───┐
│ABC│CBA│
└───┴───┘
在 NARS2000 中,简单:
A←(1 3 2)(3 2 1)
B←'ABC'
⎕fmt {B[⍵]}¨¨A
┌2────────────┐
│┌3───┐ ┌3───┐│
││ ACB│ │ CBA││
│└────┘ └────┘2
└∊────────────┘
C←(1 3 2 3 2 1)(3 2 1)
⎕fmt {B[⍵]}¨¨C
┌2───────────────┐
│┌6──────┐ ┌3───┐│
││ ACBCBA│ │ CBA││
│└───────┘ └────┘2
└∊───────────────┘
我有一个包含一些索引的向量向量,以及一个我想在其上使用它们的字符向量。
A←(1 2 3)(3 2 1)
B←'ABC'
我试过:
B[A]
RANK ERROR
B[A]
∧
A⌷B
LENGTH ERROR
A⌷B
∧
和
A⌷B
LENGTH ERROR
A⌷¨B
∧
我愿意
┌→────────────┐
│ ┌→──┐ ┌→──┐ │
│ │ABC│ │CBA│ │
│ └───┘ └───┘ │
└∊────────────┘
将被退回,但如果我需要寻找其他方式,请告诉我。
来自数组的index function ⌷
is a bit odd. To select multiple major cells,需要将数组的索引括起来:
(⊂3 2 1)⌷'ABC'
CBA
为了使用两个索引向量中的每一个,您要从中选择的数组需要分布在这两个向量中。您可以为此使用 APL 的标量扩展,但是您要从中选择的数组需要打包为标量:
(⊂1 2 3)(⊂3 2 1)⌷¨⊂'ABC'
┌→────────────┐
│ ┌→──┐ ┌→──┐ │
│ │ABC│ │CBA│ │
│ └───┘ └───┘ │
└∊────────────┘
所以要使用你的变量:
A←(1 2 3)(3 2 1)
B←'ABC'
(⊂¨A)⌷¨⊂B
┌→────────────┐
│ ┌→──┐ ┌→──┐ │
│ │ABC│ │CBA│ │
│ └───┘ └───┘ │
└∊────────────┘
请注意,如果您要生成长度相同的排列,最好避免使用嵌套数组。嵌套数组强制系统遵循指针,而简单数组允许顺序访问密集数据。当然,这只有在您拥有大量数据时才真正重要:
⎕←SIMPLE←↑A ⍝ A 2×3 matrix of indices
1 2 3
3 2 1
(⊂SIMPLE)⌷B
ABC
CBA
B[SIMPLE] ⍝ IMHO bracket indexing is nicer for this
ABC
CBA
↓B[SIMPLE] ⍝ Split if you must
┌───┬───┐
│ABC│CBA│
└───┴───┘
在 NARS2000 中,简单:
A←(1 3 2)(3 2 1)
B←'ABC'
⎕fmt {B[⍵]}¨¨A
┌2────────────┐
│┌3───┐ ┌3───┐│
││ ACB│ │ CBA││
│└────┘ └────┘2
└∊────────────┘
C←(1 3 2 3 2 1)(3 2 1)
⎕fmt {B[⍵]}¨¨C
┌2───────────────┐
│┌6──────┐ ┌3───┐│
││ ACBCBA│ │ CBA││
│└───────┘ └────┘2
└∊───────────────┘