Indexing 如何从APL默认函数中的矩阵中提取多个元素?
(Dyalog)APL学员问题 如果我有一个矩阵Y: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 一、 但是,我们无法解决如何在默契函数中实现等效。特别是,括号索引在默认函数中似乎不起作用,我也找不到一种方法来使用索引列表的班索引 有没有办法做到这一点,或者这是对默
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