如何按指定规则将Numpy 5x8数组转换为10x4数组?
解决Numpy数组的自定义形状重组问题
核心实现代码
import numpy as np # 原始5x8数组 arr = np.array([ [ 43, 153, 39, 40, 157, 116, 78, 165], [108, 182, 42, 244, 28, 67, 59, 176], [ 44, 81, 236, 229, 102, 32, 176, 237], [143, 218, 78, 77, 237, 194, 135, 251], [247, 37, 143, 89, 100, 188, 156, 206] ]) # 构造前5行:原第0-1列 + 原第4-5列 top_section = np.hstack([arr[:, :2], arr[:, 4:6]]) # 构造后5行:原第2-3列 + 原第6-7列 bottom_section = np.hstack([arr[:, 2:4], arr[:, 6:8]]) # 上下拼接得到10x4结果 final_arr = np.vstack([top_section, bottom_section])
思路解析
解决报错根源:你之前遇到的
operands could not be broadcast together错误,是因为直接把(5,2)形状的列数据往(10,4)数组里赋值,两者形状完全不兼容。Numpy要求赋值操作的左右两边必须形状匹配,或满足广播规则,这里显然不满足。分块拼接更高效:
- 先用
hstack(水平拼接)把需要的列组合成5x4的子数组:前半部分保留原前两列,搭配第4-5列;后半部分取原第2-3列,搭配第6-7列。 - 再用
vstack(垂直拼接)把两个5x4的子数组堆叠成最终的10x4数组。
- 先用
适配图像处理场景:这种向量级操作是Numpy的核心优势,比循环逐个赋值效率高得多,完全适配灰度图这类像素矩阵的重组需求。
内容的提问来源于stack exchange,提问作者jport
相关产品推荐
相关产品推荐

