APL - 从矩阵中过滤、分组和排序的惯用方法

问题描述 投票:0回答:1

我正在尝试学习 APL,但我很难以惯用的方式编写代码。 我认为,部分问题在于很难找到足够广泛和完整的教材。 例如,考虑以下问题:我们有一个 n 行 3 列的矩阵。假设所有列都属于同一类型。我们想要获得第二列上的元素向量的向量,按第一列的值分组,并按第三列的值排序。 例如,对于输入矩阵

1 A  1
1 B  3
2 F  5
2 B  2
1 C  8
1 D 10
2 D  9
2 E 13

我们希望输出为

┌────┬────┐
│ABCD│BFDE│
└────┴────┘

我想出了:

{1 ⌷[2]¨{(⍵[;1] {⍺ ⍵}⌸ ⍵[;2 3])[;2]} {↑(↓⍵)[⍋⍵[;3]]} ⍵}

这是有效的,但我确信在 APL 中有一种更简单、更优雅、更惯用的方法来做到这一点。 你会怎么做?

matrix vector apl
1个回答
0
投票
input← (⍪1 1 2 2 1 1 2 2),(⍪'ABFBCDDE'),⍪1 3 5 2 8 10 9 13
{↓(x[;1])⊢⌸2⌷[2]x←⍵[⍋⍵[;3];]}input

假设

⎕IO←1

我们想要获得第二列上元素向量的向量,按第一列中的值进行分组,并按第三列中的值进行排序。

在重新分组之前使用

对输入进行排序更容易实现这一点,因为很高兴知道在重新分组期间保持顺序。

© www.soinside.com 2019 - 2024. All rights reserved.