如何将4×4 Python数组按2×2区块拆分至独立数组?
拆分4×4数组为2×2区块集合
嘿,我完全懂你现在的状况——脑子卡壳的时候哪怕简单的逻辑都想不起来,别担心,拆分4×4数组为独立的2×2区块其实很容易,我给你两种实用的实现方式:
纯Python原生实现(无需额外库)
这种方法适合不想引入第三方库的场景,核心是通过遍历区块的起始索引来提取元素:
# 你的示例数组 original_array = [[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]] result_blocks = [] # 遍历每个2×2区块的起始行索引(0和2) for row_start in [0, 2]: # 遍历每个2×2区块的起始列索引(0和2) for col_start in [0, 2]: # 提取当前区块的四个元素并整理成列表 current_block = [ original_array[row_start][col_start], original_array[row_start][col_start+1], original_array[row_start+1][col_start], original_array[row_start+1][col_start+1] ] result_blocks.append(current_block) print(result_blocks) # 输出:[[1,2,5,6],[3,4,7,8],[9,10,13,14],[11,12,15,16]]
逻辑说明:
- 4×4数组的2×2区块起始行只能是
0和2,起始列同理; - 对每个起始点,我们取
行起始和行起始+1的两行,列起始和列起始+1的两列,把这四个位置的元素组合成一个区块数组; - 如果后续要处理更大的偶数阶数组(比如6×6),可以把
[0,2]改成range(0, len(original_array), 2),实现动态遍历起始索引。
使用NumPy的便捷实现(适合处理大规模数组)
如果你经常处理数组操作,NumPy能让这个过程更简洁高效:
import numpy as np original_array = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]]) # 拆分并重塑数组得到目标格式 blocks = original_array.reshape(2, 2, 2, 2).swapaxes(1, 2).reshape(4, 4) # 转成Python列表(如果需要的话) print(blocks.tolist()) # 输出:[[1,2,5,6],[3,4,7,8],[9,10,13,14],[11,12,15,16]]
逻辑说明:
reshape(2,2,2,2):把原4×4数组拆分成2×2个区块,每个区块是2×2的子数组;swapaxes(1,2):调整维度顺序,让区块内的元素排列符合你的需求;reshape(4,4):把每个2×2区块扁平化为一维数组,最终得到4个长度为4的数组。
内容的提问来源于stack exchange,提问作者tushortz
相关产品推荐
相关产品推荐

