在4D NumPy数组第三、第四维度计算均值的正确性验证问询
验证你的均值计算操作并解决维度异常问题
嘿,先理清楚你的需求和NumPy的axis逻辑:你有个shape是(8000,2350,143,20)的4D数组,想要对每个由第三、第四维度(也就是原数组的axis=2和axis=3,对应子数组shape(143,20))组成的二维子数组,沿子数组的axis=0(也就是原数组的axis=2,那个长度为143的维度)求均值,最终得到(8000,2350,20)的结果。
你的核心操作是正确的,但结果异常大概率是数组维度不对
你写的my_data = np.mean(my_data, axis=2)在逻辑上完全没问题——NumPy的axis是从0开始计数的:
- axis=0:对应8000这个维度
- axis=1:对应2350这个维度
- axis=2:对应143这个维度(正是你要压缩求均值的维度)
- axis=3:对应20这个维度
对axis=2求均值后,这个维度会被压缩,最终数组的shape应该就是你想要的(8000,2350,20)。
你得到(9360, 256, 20)的奇怪结果,最可能的原因是你实际处理的数组和你描述的不是同一个,或者它的shape根本不是(8000,2350,143,20)。先跑一行代码确认下真实维度:
print(my_data.shape)
用简化案例验证正确逻辑
我们可以用一个小型的测试数组来验证这个操作的正确性:
import numpy as np # 模拟你的数组结构,shape(2,3,4,5)对应你的(8000,2350,143,20) test_arr = np.random.rand(2, 3, 4, 5) # 沿axis=2求均值 mean_arr = np.mean(test_arr, axis=2) print(mean_arr.shape) # 输出:(2, 3, 5),完全符合预期的维度
额外排查步骤
如果你确认数组shape确实是(8000,2350,143,20)但结果还是不对,可以试试显式指定keepdims=False(这是默认值,但有时显式声明能避免一些隐性的维度保留问题):
mean_data = np.mean(my_data, axis=2, keepdims=False) print(mean_data.shape)
内容的提问来源于stack exchange,提问作者eric lardon
相关产品推荐
相关产品推荐

