Julia中permutedims函数perm参数作用机制求助
理解Julia中permutedims函数的perm参数
核心逻辑
perm参数的本质是指定新数组维度与原数组维度的对应关系:
- 对于
permutedims(A, perm),perm是长度等于ndims(A)的元组/向量 - 新数组的第
k个维度,直接对应原数组的第perm[k]个维度 - 新数组的尺寸会同步变为原数组按
perm顺序排列的维度长度
结合示例拆解
以你提供的3D数组为例:
原数组A的尺寸是(3,2,3),对应:
- 维度1:行(长度3)
- 维度2:列(长度2)
- 维度3:层(长度3)
当使用permutedims(A, (3,2,1))时:
- 新数组的第1维 ← 原数组的第3维(层),所以新第1维长度为3
- 新数组的第2维 ← 原数组的第2维(列),长度保持2不变
- 新数组的第3维 ← 原数组的第1维(行),长度为3
元素位置对应
新数组中索引为(x,y,z)的元素,等于原数组中索引为(z,y,x)的元素:
- 新维度1的
x对应原维度3的层号 - 新维度2的
y对应原维度2的列号 - 新维度3的
z对应原维度1的行号
比如:
- 原数组
A[1,1,1] = 1→ 新数组B[1,1,1] =1 - 原数组
A[1,1,2] =7→ 新数组B[2,1,1] =7 - 原数组
A[2,1,1] =2→ 新数组B[1,1,2] =2
这正好对应你观察到的:原数组每个内层矩阵(层)的第z行元素,会变成新数组第z个内层矩阵的列元素。
通用规律总结
对于N维数组A,假设perm = (p₁,p₂,...,pₙ),那么:
- 新数组的尺寸为
(size(A,p₁), size(A,p₂), ..., size(A,pₙ)) - 新数组元素
B[i₁,i₂,...,iₙ] = A[j₁,j₂,...,jₙ],其中jₖ满足:找到perm中等于k的位置m,原维度k的索引就是新维度m的索引
换一种直白的说法:把perm看成是“从原数组中挑选维度的顺序”——你按perm的顺序把原数组的维度依次拿出来,组成新数组的维度,元素的位置会跟着维度的映射关系重新排列。
内容的提问来源于stack exchange,提问作者Shayan
相关产品推荐
相关产品推荐

