如何在3D numpy数组第一轴按每12个元素分组取最大值
错误原因
- 循环范围配置错误:
range(12)会生成0~11共12个索引,但你初始化的maximum_every_12第一轴长度为36/12=3,当循环变量i达到3时就会触发轴0的索引越界 - 切片逻辑错误:
array[i::12,:,:]是从第i位开始每隔12个元素取一个,最终得到的是长度为3的序列,不是你需要的连续12个元素的分组
正确实现
实现1:循环版本(逻辑清晰易理解)
import numpy as np # 生成测试数组 array = np.random.rand(36,20,30) group_size = 12 group_count = int(array.shape[0]/group_size) # 初始化结果数组 maximum_every_12 = np.zeros((group_count, array.shape[1], array.shape[2])) # 按连续区间分组取最大值 for i in range(group_count): maximum_every_12[i,:,:] = np.max(array[i*group_size : (i+1)*group_size, :, :], axis=0)
实现2:向量化高效版本(无循环,性能更优)
利用numpy的reshape操作将第一轴拆分为分组数*每组大小的二维结构,直接对分组维度取最大值即可:
import numpy as np array = np.random.rand(36,20,30) group_size = 12 # reshape后shape为(3,12,20,30),对轴1取max得到每组的最大值 maximum_every_12 = array.reshape(-1, group_size, array.shape[1], array.shape[2]).max(axis=1)
内容的提问来源于stack exchange,提问作者wabash
相关产品推荐
相关产品推荐

