我在APLX工作,我需要在第二列订购两列矩阵(它总是两列)。问题是,第一列包含7个字母数字字符集的行。然而,第二列包含权重或者得分#34;对于每行字母数字代码。例如......
4ST7SM4 34
XXW1X2X 340000
599E5EE 1516
应按右侧的数字排序,看起来像......
XXW1X2X 340000
599E5EE 1516
4ST7SM4 34
所以总是按降序排列。我已经玩过降级功能,但是我得到了一个值错误,正如预期的那样,因为第一列是字母数字。我玩了交换列并将它们交换回来,但它仍然无法正常工作,这意味着它会抛出同样的错误。我可以将它们分开,然后对数字进行排名,但是我需要字母数字板来重新排序。我不知道该怎么做。
答案 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] ; ]