Python如何借助3D数组完成指定规则的2D数组填充转换
解决方法
你的需求本质是将原数组按每2行切分为若干个2行2列的子块后,对所有子块的对应位置元素求和,最终得到2行2列的结果数组。
原生Python实现(无需第三方库)
你原来生成子块的逻辑是正确的,只需要调整后续求和的逻辑即可:
data = [[1, 7], [2, 8], [3, 9], [4, 10], [5, 11], [6, 12], [13, 14], [15, 16]] m = 2 # 按每2行切分得到所有2x2子块 block_list = [data[idx: idx + m] for idx in range(0, len(data), m)] # 初始化结果数组为2行2列的零数组 result = [[0]*2 for _ in range(2)] # 遍历所有子块累加对应位置的值 for block in block_list: for row in range(2): for col in range(2): result[row][col] += block[row][col] print(result)
运行输出为 [[22, 41], [27, 46]],和你需要的加法计算结果完全匹配。该逻辑可以直接适配更大的数据集,只要数据集符合2行一组的排列规则即可。
高效实现(适合大规模数组)
如果需要处理数据量较大的场景,推荐使用numpy库实现,代码更简洁执行效率更高:
import numpy as np data = [[1, 7], [2, 8], [3, 9], [4, 10], [5, 11], [6, 12], [13, 14], [15, 16]] # 调整数组形状为(子块数量, 2, 2)后按子块维度求和 result = np.array(data).reshape(-1, 2, 2).sum(axis=0).tolist() print(result)
内容的提问来源于stack exchange,提问作者NycoElm
相关产品推荐
相关产品推荐

