Indexing 如何从APL默认函数中的矩阵中提取多个元素?

Indexing 如何从APL默认函数中的矩阵中提取多个元素?,indexing,multi-index,apl,dyalog,tacit-programming,Indexing,Multi Index,Apl,Dyalog,Tacit Programming,(Dyalog)APL学员问题 如果我有一个矩阵Y: Y 4 9 2 3 5 7 8 1 6 我可以得到两个这样的成员: Y[(1 1) (2 2)] 4 5 (1 2)3⌷Y 3 6 我可以使用dfn语法使用相同的技术: {⍵[(1 1) (2 2)]}Y 4 5 一、 但是,我们无法解决如何在默契函数中实现等效。特别是,括号索引在默认函数中似乎不起作用,我也找不到一种方法来使用索引列表的班索引 有没有办法做到这一点,或者这是对默

(Dyalog)APL学员问题

如果我有一个矩阵Y:

          Y
4 9 2
3 5 7
8 1 6
我可以得到两个这样的成员:

      Y[(1 1) (2 2)]
4 5
      (1 2)3⌷Y
3 6
我可以使用dfn语法使用相同的技术:

      {⍵[(1 1) (2 2)]}Y
4 5
一、 但是,我们无法解决如何在默契函数中实现等效。特别是,括号索引在默认函数中似乎不起作用,我也找不到一种方法来使用索引列表的班索引

有没有办法做到这一点,或者这是对默认功能的限制

请注意,在我的实际示例中,索引列表是生成的,因此我不能简单地执行
((1)⌷⊢),(2 2)⌷⊢)Y
或任何类似内容

(1 1)(2 2)⌷¨⊂Y
同样有效

(1 1)(2 2)⊃⍤0 99⊢Y

第一件可以尝试的事情是

      Y ← 3 3⍴⍳9
      Y
1 2 3
4 5 6
7 8 9

      Y[(1 1)(2 2)]
1 5

      1 1⌷Y
1

      (1 1)(2 2)⌷Y
2 2
2 2
但是我们看到
(1)(2)⌷Y
不起作用。发生的是
查看其左侧的向量并构建所有索引组合,它只构建一个2乘2的2矩阵,因为
(1)(2)
被解释为索引
(12)
(1,2)
(1,2)
,然后再
(1,2)
。 这样看可能更容易:

      Y[(1 1) (2 2)]
4 5
      (1 2)3⌷Y
3 6
(12)3⌷
表示“从第一行和第二行开始,给我第三列中的元素”

因此,如果您想给出这样的索引,您可能需要使用带有

      (1 1)(2 2)⌷¨⊂Y
1 5
如果你真的心照不宣,那么你可以使用

I ← ⌷¨∘⊂
正如其他答案所示,索引还有更多的选择。我还可以推荐以下关于索引的网络研讨会:


花点时间浏览一下视频中的备选方案,APL与Python不同:在APL中,通常有不止一种显而易见的方法:)

⊃⍤0 99
似乎是快乐猴子的晦涩版本
⊃¨⊂:P@RGS这是一个问题。我认为:⌷¨⊂ 是⊃⍤0 99,以及⊃¨⊂ 是⌷⍤0 99