如何用循环按指定大小合并Numpy中的多个二维数组?
解决方案
要实现自定义合并大小的循环拼接,核心思路是按指定批次大小拆分数组列表,逐批拼接。这样你可以随时调整batch_size参数来改变每一组合并的数组数量,不用手动写多个np.concatenate语句。
下面是具体实现代码:
import numpy as np # 你的数组定义(修正了原代码中`01`的语法问题) a1 = np.array([[0, 12, 3], [5, 8, 9]]) a2 = np.array([[2, 13, 3], [5, 9, 9]]) a3 = np.array([[0, 24, 4], [6, 10, 9]]) a4 = np.array([[1, 55, 6], [4, 5, 19]]) a5 = np.array([[1, 56, 6], [4, 1, 9]]) a6 = np.array([[1, 57, 6], [4, 20, 9]]) a7 = np.array([[1, 58, 6], [4, 30, 9]]) a8 = np.array([[1, 59, 6], [4, 40, 9]]) a9 = np.array([[1, 51, 6], [4, 60, 9]]) a10 = np.array([[1, 34, 6], [4, 60, 9]]) a11 = np.array([[1, 51, 62], [4, 30, 9]]) a12 = np.array([[1, 1, 6], [4, 7, 9]]) M = [a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12] # 自定义合并批次大小,这里可以改成你需要的数值(比如2、4等) batch_size = 3 # 循环分批拼接 X = [] for start_idx in range(0, len(M), batch_size): # 截取当前批次的数组 current_batch = M[start_idx : start_idx + batch_size] # 沿轴1拼接数组 merged_array = np.concatenate(current_batch, axis=1) X.append(merged_array) # 输出结果验证 for idx, arr in enumerate(X): print(f"合并后的数组X[{idx}]:\n{arr}\n")
关键说明
- 批次拆分逻辑:
range(0, len(M), batch_size)会生成从0开始、步长为batch_size的索引序列,比如当len(M)=12、batch_size=3时,索引为0,3,6,9,正好对应4组各3个数组。 - 通用兼容性:如果数组总数不是
batch_size的整数倍(比如13个数组、batch_size=3),最后一批会自动取剩余的所有数组(比如1个),np.concatenate处理单个数组时会直接返回原数组,不会报错。 - 简化写法:如果喜欢更简洁的代码,可以用列表推导式一行完成:
batch_size = 3 X = [np.concatenate(M[i:i+batch_size], axis=1) for i in range(0, len(M), batch_size)]
这样调整batch_size的值就能轻松改变合并的数组数量,比如改成batch_size=4,就会每4个数组拼接成一组,最终得到3个合并后的数组。
内容的提问来源于stack exchange,提问作者Primo Raj
相关产品推荐
相关产品推荐

