关于函数 transpose 和 E@p

根据函数文档描述,transpose(A) 用于计算矩阵 A 的转置,此时 A 必须是一个矩阵,如果 A 是一个不等长度的多层序列,用 transpose 转置算不算非法?因为转置结果有点意料之外。
比如,对序列 [[1],[2,3],[4,5,6]] 进行 transpose 之后,结果如下所示:

imagepng

我原本猜想的结果是,转置之后,不等长的位置之处会用 null 代替,而公式显示的结果是用一个压缩序列填充了。这是函数原本设计成这样,还是说 (my two cents) 用 null 填充会更合适?我测试了一下,如果是矩阵转置,一百万行很快能出结果,如果是不等长序列转置,其中有一个是 100 万个元素,其它的元素个数不等,此时 transpose 效率低下甚至崩溃,因为它要把每个空缺的地方用序列去填充,所以开销很大,如果换成 null 填充会不会开销没那么大?这只是我毫无理论依据的猜想,不知道对不对。

对于转置,spl 还提供了一个函数 E@p,当然这个处理的不是矩阵,拿他作对比是为了说明一种效果。对上述同样的不等长序列用 E@bp 转置后,会生成一个没有表头的序表,结果如下:

imagepng

可以看到,E@p 转置后把缺失的地方用 null 填充了,但结果是一个序表。这两种写法在集算器 IDE 里的得到结果和在 EXCEL 插件里得到的结果是一样的。

如果要把序列 [[1],[2,3],[4,5,6]] 变成序列[[1,2,4],[null,3,5],[null,null,6]],得到元素 zip 之后的效果,显然,

  • transpose 是最直接的,但转置之后的结果有点不合适;
  • 用 E@p 虽然能达到预期,但结果是一个序表,要变成序列还得再加一步,E@bp().array().m(2:);
  • 或者用以下嵌套循环的写法,也不是很直接,需先计算出元素的最大长度:

imagepng

恳请大佬得闲时指点一下,有没有直接一点的方法,fx_ 转置 (多层序列) 得到预期的结果。
谢谢!