You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Dyalog APL中将三元组向量直接转换为3×n×3矩阵?

直接塑形实现3×1000×3矩阵的APL方案

当然可以直接对原向量一步完成塑形和轴调整,不用拆分再合并的中间步骤!咱们先拆解需求的结构逻辑,再给出简洁的实现。

核心思路

你的原向量有9000个元素,本质是按**「1000组 → 每组3个子组 → 每个子组3个元素」的顺序线性展开的。目标矩阵的形状是3 1000 3,对应「子组维度 → 组维度 → 元素维度」**。所以我们只需要先把向量塑形成符合原始分组的三维结构,再调整轴的顺序即可。

一步到位的代码

⎕IO←0
target ← ⍉[1 0 2] 1000 3 3⍴data

代码解释

  1. 1000 3 3⍴data:先把原向量塑形成1000×3×3的三维数组,对应「组×子组×元素」的结构,完美匹配原始数据的分组逻辑。
  2. ⍉[1 0 2]:转置操作,交换前两个轴的位置,把「组×子组×元素」转换为「子组×组×元素」,正好得到你需要的3×1000×3形状。

通用化:将三元组向量转为3×n×3矩阵

如果你的向量长度是9n(即n组,每组3个3元素子组),可以把代码通用化为:

⎕IO←0
n ← 9÷⍨≢data  // 计算组数n
target ← ⍉[1 0 2] n 3 3⍴data

如果你的输入是已经按「子组→元素」打包的嵌套三元组集合(比如n个元素,每个元素是3个3元素的子组),可以先展平再塑形:

⎕IO←0
target ← ⍉[1 0 2] n 3 3⍴,data  // ,data展平嵌套向量

和原代码的对比

你的原代码通过拆分再合并得到结果,而上面的方案直接对原向量操作,减少了中间变量,效率和可读性都更高。你可以运行≡ target d来验证两个方案的结果完全一致。

内容的提问来源于stack exchange,提问作者xpqz

火山引擎 最新活动