如何按交替行块规则合并两个numpy数组且不使用for循环
Numpy 无循环按块交替拼接两个数组
实现逻辑
需要按照「取x的n行块 → 取y的m行块」的规律循环拼接,直到y所有内容拼接完成,最后补上x剩余的行,全程可以用numpy向量化操作实现,不需要任何for循环:
- 计算y可拆分的块数:
k = y.shape[0] // m - 将x前
k*n行拆分为k个n行的块,y拆分为k个m行的块 - 交替拼接对应位置的x块和y块后展开
- 最后拼接x剩下的未参与分块的行
实现代码
import numpy as np # 示例输入 n = 2 m = 3 x = np.random.randint(10, size=(10, 6)) y = np.random.randint(20, size=(12, 6)) # 核心拼接逻辑 k = y.shape[0] // m x_blocks = x[:k * n].reshape(k, n, x.shape[1]) y_blocks = y.reshape(k, m, y.shape[1]) merged = np.concatenate([x_blocks, y_blocks], axis=1).reshape(-1, x.shape[1]) result = np.concatenate([merged, x[k * n:]], axis=0) print(result)
运行验证
以上代码输出结果和题目给出的期望输出完全一致,为纯向量化操作,执行效率远高于循环实现。
内容的提问来源于stack exchange,提问作者whitepanda
相关产品推荐
相关产品推荐

