如何在Dyalog APL中对矩阵的每一行元素进行排序?
对APL矩阵每行元素排序的方法
你已经找到了关键的grade矩阵,接下来只需要用它来索引原矩阵的每行就能得到排序结果,具体步骤如下:
先定义原矩阵:
M ← 3 3 rho 2 3 1 4 5 7 1 9 8生成每行的升序grade矩阵(你已经得到的结果):
用⍤1指定按行计算grade,写法更简洁:G ← ⍋⍤1 M ⍝ 结果就是3 3 rho 3 2 1 1 2 3 1 3 2用grade矩阵索引原矩阵,得到每行排序后的结果:
用方括号索引或者⌷操作符都可以,两种写法等价:M[;G] ⍝ 直接索引,更直观 ⍝ 或者用⌷操作符指定轴:M ⌷[1] G运行后就能得到目标矩阵
3 3 rho 1 2 3 4 5 7 1 8 9
关键逻辑说明
⍋是升序grade函数,返回元素从小到大对应的原位置索引;如果要降序排序,换成⍒即可⍤1表示对每行单独执行操作(轴1对应列方向,即每行内部)M[;G]的索引语法中,;代表保留所有行,G的每行对应原矩阵该行的元素索引顺序,从而实现每行内的排序
内容的提问来源于stack exchange,提问作者Kuushu Enshin
相关产品推荐
相关产品推荐

