You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R语言中对向量化张量进行重新排序?

R语言中张量向量化后的重新排序问题

假设我们有一个维度为RST的向量化张量:

A <- c(a111, a112, a113, ..., a11T, a121, ..., a1ST, a211, ..., aRST)

其元素顺序为:固定i(第一个维度),遍历j(第二个维度),每个j下遍历k(第三个维度);再递增i,重复上述过程。

现在需要将其重新排序为以下顺序:

c(a111, a211, ..., aR11, a112, a212, ..., aR12, ..., aRST)

即固定j和k,遍历i;再递增k,固定j遍历i;最后递增j,重复上述过程。


现有思路的问题

我尝试将A转换为数组:

Arr <- array(A, dim = c(R, S, T))

但不确定后续如何重新向量化,也担心效率问题。c(Arr)默认按列优先展开(第一个维度变化最快),无法指定展开轴;expand.grid()也不适用,因为它默认让第一个因子变化最快,不符合需求。


解决方案

可以用aperm()调整数组的维度顺序,再用c()向量化,这是高效的实现方式:

# 1. 将原始向量转换为数组,维度对应R*S*T
Arr <- array(A, dim = c(R, S, T))
# 2. 调整维度顺序:将原数组的第二、第三维度交换,得到(R, T, S)的数组
#    此时第一个维度(R)变化最快,第三个维度(S)变化最慢,符合目标顺序
Arr_reordered <- aperm(Arr, c(1, 3, 2))
# 3. 向量化得到目标序列
target_A <- c(Arr_reordered)

说明

  • aperm()是R中专门用于调整数组维度顺序的函数,底层由C实现,处理大张量时效率很高,远优于手动循环或其他低效方法。
  • 调整维度顺序后,c()的默认列优先展开正好匹配我们需要的元素顺序:先遍历i(R维度),再遍历k(T维度),最后遍历j(S维度)。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 08:03:02