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

时间:2015-03-11 19:51:18

标签: matrix multidimensional-array apl

我在APLX工作,我需要在第二列订购两列矩阵(它总是两列)。问题是,第一列包含7个字母数字字符集的行。然而,第二列包含权重或者得分#34;对于每行字母数字代码。例如......

4ST7SM4     34
XXW1X2X 340000
599E5EE   1516

应按右侧的数字排序,看起来像......

XXW1X2X 340000
599E5EE   1516
4ST7SM4     34

所以总是按降序排列。我已经玩过降级功能,但是我得到了一个值错误,正如预期的那样,因为第一列是字母数字。我玩了交换列并将它们交换回来,但它仍然无法正常工作,这意味着它会抛出同样的错误。我可以将它们分开,然后对数字进行排名,但是我需要字母数字板来重新排序。我不知道该怎么做。

2 个答案:

答案 0 :(得分:2)

首先,您必须对单个,第二列进行分级,然后重新排序整个矩阵。注意索引原点为零,如果使用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

答案 1 :(得分:0)

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

然后将等级和等级降低以对字符和矩阵数据进行操作。在I. P. Sharp,这发生在1980年左右。很可能其他人(IBM,STSC)在那时做了同样的事情。

但是,当时,角色等级需要左参数,即整理顺序。通常,[] AV足够好,但如果你想做涉及大写和小写字母的分类,你可能不得不使用像

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

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

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