如何在Python中合并多个NumPy数组 解决ndarray无append属性报错
NumPy多维度数组合并报错解决方案
错误原因
NumPy的ndarray数组对象没有内置append实例方法,该方法是Python原生列表的独有方法,因此直接调用数组的append属性会触发AttributeError。
即使你改用NumPy提供的全局np.append方法,也不建议在循环中反复调用:该方法每次执行都会重新分配整块内存存储新数组,数据量较大时运行效率极低。
正确实现方案
你所有待合并的数组第二维均为9,满足垂直拼接的维度要求,最优方案是先将所有加载的数组存入Python列表,最后一次性调用np.concatenate完成拼接,无需提前预估数组总长度,也没有冗余的内存开销。
修正后的代码如下:
import os import numpy as np # 切换到目标文件夹 os.chdir("E:/pythoncode/feature") # 筛选所有npy后缀的文件 fnames_transfer = [x for x in os.listdir() if x.endswith(".npy")] # 临时列表存储所有加载的数组 all_arrays = [] for fname in fnames_transfer: data = np.load(fname) all_arrays.append(data) # 按行拼接所有数组,axis=0代表沿第一维度拼接 feature = np.concatenate(all_arrays, axis=0)
补充说明
如果你坚持要使用append写法实现(仅作演示,不推荐生产环境使用),正确语法如下:
# 注意每次要给feature重新赋值,且必须指定拼接维度 feature = np.append(feature, data, axis=0)
该写法需要提前确认初始feature的长度足够且后续不会残留多余初始化的0值,否则会出现数据错误。
内容的提问来源于stack exchange,提问作者david
相关产品推荐
相关产品推荐

