0

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

4ST7SM4     34
XXW1X2X 340000
599E5EE   1516

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

XXW1X2X 340000
599E5EE   1516
4ST7SM4     34

所以总是按降序排列。我已经使用了 rank down 函数,但正如预期的那样,我得到了一个值错误,因为第一列是字母数字。我尝试交换列并将它们交换回来,但它仍然不起作用,这意味着它会引发相同的错误。我可以将它们分开,并对数字进行排序,但我需要字母数字板来重新排序。我不知道该怎么做。

4

2 回答 2

2

First you must grade the single, second column, then reorder the entire matrix. Note index origin is zero, if you use 1, replace 1 in bracket indexing with a 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

All in one go:

      m[⍋m[;1];]
 4ST7SM4     34
 599E5EE   1516
 XXW1X2X  34000
于 2015-03-12T13:01:11.610 回答
0

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

然后将升级和降级扩展到对字符和矩阵数据进行操作。在 IP Sharp,这发生在 1980 年左右。很可能其他公司(IBM、STSC)在那时也做了同样的事情。

然而,当时,字符等级需要一个左参数,即排序顺序。通常, []AV 就足够了,但如果你想做涉及大小写字母的排序,你可能不得不使用类似的东西

'aAbBcCdD...zZ0123456789 ' gradeUp mat

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

m[ []av gradeUp disclose m[;2] ; ]
于 2015-03-30T08:43:50.093 回答