如何将(3,2,2)形状的numpy数组变形为MATLAB兼容的(2,2,3)格式
Numpy (3,2,2) 数组转MATLAB兼容(2,2,3)格式方案
问题背景
现有形状为3,2,2的Numpy数组:
np.array([[[1,2],[3,4]],[[5,6],[7,8]],[[9,10],[11,12]]])
需要转换为2,2,3形状,满足MATLAB工具包的格式要求,预期MATLAB中读取后的输出为:
val(:,:,1) = 1 2 3 4 val(:,:,2) = 5 6 7 8 val(:,:,3) = 9 10 11 12
已知无效方案
- 直接调用
arr.reshape(2,2,3)无法得到预期结果 - 此前的转置类方案会导致MATLAB中读取的矩阵行列互换,不符合要求:
val(:,:,1) = 1 3 2 4 val(:,:,2) = 5 7 6 8 val(:,:,3) = 9 11 10 12
正确实现方案
核心操作为调整数组轴的逻辑位置,将原数组第0维的3个2×2矩阵直接移动到最后一维,代码如下:
import numpy as np # 原始数组 arr = np.array([[[1,2],[3,4]],[[5,6],[7,8]],[[9,10],[11,12]]]) # 调整轴位置 target_arr = np.moveaxis(arr, source=0, destination=-1) # 验证形状与数值 print(target_arr.shape) # 输出 (2, 2, 3) print(target_arr[..., 0]) # 输出 [[1 2],[3 4]],对应MATLAB val(:,:,1) print(target_arr[..., 1]) # 输出 [[5 6],[7 8]],对应MATLAB val(:,:,2) print(target_arr[..., 2]) # 输出 [[ 9 10],[11 12]],对应MATLAB val(:,:,3)
如果需要导出为MATLAB可读取的mat文件,补充代码如下:
from scipy.io import savemat savemat("data.mat", {"val": target_arr})
在MATLAB中直接加载data.mat即可得到符合要求的val变量。
原理说明
Numpy默认采用C风格行优先存储,MATLAB采用Fortran风格列优先存储,直接reshape仅改变维度读取规则,不会调整数据的逻辑分组。
moveaxis直接修改轴的顺序,将原本独立的3组2×2矩阵映射到MATLAB的第三维索引,完全匹配格式要求。
内容的提问来源于stack exchange,提问作者rpb
相关产品推荐
相关产品推荐

