Python中numpy.ndarray无append属性的AttributeError报错求助
错误原因
AttributeError: 'numpy.ndarray' object has no attribute 'append' 这个错误很明确:你在调用numpy数组的append方法,但append是Python原生列表(list)的专属方法,numpy数组根本没有这个属性。
十有八九是你在执行image_array.append(image)之前,已经把image_array定义成了numpy数组,而非普通的空列表。
解决方法
分两种常用场景处理:
场景1:先收集数据再转数组(推荐)
如果你的流程是先批量攒数据,最后转成numpy数组,那正确的做法是先把image_array和label_array初始化为空列表,用列表的append添加元素,最后再转成numpy数组。代码示例:
# 初始化空列表 image_array = [] label_array = [] # 循环/单次添加元素 image_array.append(image) label_array.append(i) # 最后转换为numpy数组 image_array = np.array(image_array) label_array = np.array(label_array, dtype="float")
这种方式效率更高,因为列表的append操作比numpy数组的拼接开销小很多,数据量大的时候差异尤其明显。
场景2:基于现有numpy数组扩展
如果已经有现成的numpy数组,需要扩展它,就得用numpy提供的全局函数np.append()(注意不是数组自身的方法):
# 假设image_array已经是numpy数组 image_array = np.append(image_array, image) # 要是处理多维数据(比如单张图片是(28,28),数组是(n,28,28)),得保证维度匹配,可能要加reshape或者用列表包裹: image_array = np.append(image_array, [image], axis=0) label_array = np.append(label_array, i).astype("float")
提醒一句:numpy的append每次都会生成新数组,频繁调用会拖慢程序,所以能先用列表攒数据的话,优先选场景1的方案。
内容的提问来源于stack exchange,提问作者RVC
相关产品推荐
相关产品推荐

