Numpy中4D数组拼接与降维至3D的技术求助
解决Numpy 4D数组的拼接与降维问题
嘿,作为Numpy新手碰到数组维度操作的困惑太正常啦,我来帮你把这两个需求理清楚,顺便看看你写的代码哪里需要调整~
1. 拼接第四维度的正确方式
你的需求是把两个形状为(2,4,130,10)的数组,在第四维度拼接成(2,4,130,20)。先说说你尝试的代码问题:
data_1= np.concatenate((data_1_1[...,np.newaxis],data_1_2[...,np.newaxis]),axis=2)
这段代码里,你给每个数组的最后加了一个新维度(变成(2,4,130,10,1)),然后指定axis=2拼接,最终得到的形状会是(2,4,260,10,1),完全不符合你的预期。
正确的做法是直接拼接原数组,指定第四维度(axis=3),因为Numpy的axis从0开始计数,第四维度对应的axis是3:
import numpy as np # 示例数据 data_1_1 = np.random.rand(2,4,130,10) data_1_2 = np.random.rand(2,4,130,10) # 正确拼接 data_1 = np.concatenate((data_1_1, data_1_2), axis=3) print(data_1.shape) # 输出 (2, 4, 130, 20)
2. 将4D数组降为3D数组
你的需求是把形状(3,5,130,20)的数组,合并前两个维度得到(15,130,20)。这里可以用np.reshape,利用-1让Numpy自动计算合并后的维度大小(3*5=15):
# 示例数据 data_2_1 = np.random.rand(3,5,130,20) # 降维操作 data_2 = data_2_1.reshape(-1, 130, 20) print(data_2.shape) # 输出 (15, 130, 20)
reshape会默认按行优先(C顺序)合并维度,刚好符合你把前两个维度3*5合并成15的需求。
总结一下
- 拼接维度时,不需要额外添加
np.newaxis,直接指定目标维度对应的axis即可; - 合并维度用
reshape(-1, ...)是最简洁的方式,-1会自动帮你计算出正确的维度大小。
内容的提问来源于stack exchange,提问作者eric lardon
相关产品推荐
相关产品推荐

