在 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
└∊───────────────┘