APLX:按第二列排序混合数据矩阵

APLX: Order a mixed data matrix by second column

我在 APLX 工作,我需要在第二列之前订购一个双列矩阵(它总是两列)。这个问题是,第一列包含 7 个字母数字字符集的行。但是,第二列包含每行字母数字代码的权重或 "score"。例如...

4ST7SM4     34
XXW1X2X 340000
599E5EE   1516

应该按右边的数字排序所以看起来像...

XXW1X2X 340000
599E5EE   1516
4ST7SM4     34

所以总是降序排列。我玩过降级函数,但正如预期的那样,我得到了一个值错误,因为第一列是字母数字。我试过交换列并将它们交换回去,但它仍然不起作用,这意味着它会抛出相同的错误。我可以将它们分开,然后对数字进行排序,但我需要字母数字板来重新排序。我不确定该怎么做。

首先,您必须对第二列进行评分,然后对整个矩阵重新排序。注意索引原点为零,如果使用 1,请将括号索引中的 1 替换为 2:

      m←3 2⍴'4ST7SM4' 34  'XXW1X2X' 34000 '599E5EE' 1516
      m
 4ST7SM4     34
 XXW1X2X  34000
 599E5EE   1516
      ⍒m[;1]
1 2 0
      m[1 2 0;]
 XXW1X2X  34000
 599E5EE   1516
 4ST7SM4     34

一气呵成:

      m[⍋m[;1];]
 4ST7SM4     34
 599E5EE   1516
 XXW1X2X  34000

一开始有升有降。这些仅在数字向量上定义。

然后将 grade up 和 grade down 扩展为对字符和矩阵数据进行操作。在 I. P. Sharp,这发生在 1980 年左右。很可能其他公司(IBM、STSC)当时也这样做了。

但是,当时字符等级需要一个左参数,这是整理顺序。通常,[]AV 已经足够好了,但如果你想对大小写字母进行排序,你可能不得不使用类似

的东西
'aAbBcCdD...zZ0123456789 ' gradeUp mat

这可能是APLX中值错误的原因。他们的字符等级实现可能需要一个左参数。假设您的示例矩阵的第二列是字符,请使用 []AV 再次尝试您的示例,即

m[ []av gradeUp disclose m[;2] ; ]