如何由两个二维NumPy数组构造指定形状的四维NumPy数组
NumPy维度重构实现方案
核心思路
你手里的U、V数组当前维度顺序是(单图总像素数, 图像总数),和目标需要的(图像总数, 图像高, 图像宽, 通道数)维度顺序不匹配,按以下步骤处理即可:
- 先调换维度顺序,把图像总数维度移到最前面
- 把平铺的160000个像素拆成
200×800的二维图像结构 - 沿最后一个维度拼接U、V两个分量,得到最终数组
实现代码
import numpy as np # 步骤1:转置调换维度,再重构单图的二维结构 u_reshape = U.T.reshape(91, 200, 800) v_reshape = V.T.reshape(91, 200, 800) # 步骤2:沿最后一个轴堆叠两个分量,直接得到目标形状的X X = np.stack([u_reshape, v_reshape], axis=-1)
也可以用更简洁的写法,减少中间变量内存占用:
X = np.stack([U.T, V.T], axis=-1).reshape(91, 200, 800, 2)
注意事项
- 禁止直接对原始形状的
U/V调用reshape(91,200,800):reshape不会自动调换维度顺序,直接重构会把不同图像的像素打乱,得到完全错误的结果。 - 可以运行以下代码校验结果正确性:
# 校验输出形状 print(X.shape) # 预期输出: (91, 200, 800, 2) # 校验分量对应关系 print(np.array_equal(X[..., 0], U.T.reshape(91,200,800))) # 预期输出: True print(np.array_equal(X[..., 1], V.T.reshape(91,200,800))) # 预期输出: True
内容的提问来源于stack exchange,提问作者Mark Nguyen
相关产品推荐
相关产品推荐

