如何将多个numpy矩阵动态追加合并为形状为(3,2,4)的多维数组
解决方案
numpy数组为固定大小的内存结构,频繁拼接会触发全量内存拷贝,性能较低,可根据使用场景选择以下实现方式:
方式1:直接使用np.concatenate实现动态追加
适用于追加操作较少的场景,示例代码如下:
import numpy as np # 初始三个矩阵 testMat1 = np.array([[1,2,3,4],[4,5,6,7]]) testMat2 = np.array([[7,8,9,10],[10,11,12,13]]) testMat3 = np.array([[2,4,6,8],[3,5,7,9]]) # 初始合并为形状(3, 2, 4)的数组 combined_arr = np.stack([testMat1, testMat2, testMat3], axis=0) # 追加新的形状为(2,4)的矩阵 new_mat = np.array([[1,3,5,7],[2,4,6,8]]) # 先给新矩阵新增第0维度,变为(1,2,4)后在第0维拼接 combined_arr = np.concatenate([combined_arr, new_mat[np.newaxis, :]], axis=0) # 验证形状 print(combined_arr.shape) # 输出 (4, 2, 4)
方式2:列表缓存+一次性转换(更推荐)
如果需要频繁追加矩阵,优先用普通Python列表缓存所有矩阵,全部追加完成后一次性转换为numpy数组,避免多次内存拷贝,性能提升明显:
import numpy as np testMat1 = np.array([[1,2,3,4],[4,5,6,7]]) testMat2 = np.array([[7,8,9,10],[10,11,12,13]]) testMat3 = np.array([[2,4,6,8],[3,5,7,9]]) # 用列表存储所有矩阵 mat_cache = [testMat1, testMat2, testMat3] # 后续追加新矩阵直接操作列表 new_mat = np.array([[1,3,5,7],[2,4,6,8]]) mat_cache.append(new_mat) # 全部数据准备完成后一次性转换为目标数组 combined_arr = np.array(mat_cache) print(combined_arr.shape) # 输出 (4, 2, 4)
注意:不推荐使用
np.append,它默认会将输入数组扁平化,即使指定axis参数,本质也是对np.concatenate的封装,灵活性和可读性都不如直接使用np.concatenate。
内容的提问来源于stack exchange,提问作者John S
相关产品推荐
相关产品推荐

