如何将numpy数组追加到另一数组?水平拼接报零维数组无法拼接如何解决
错误原因
你初始化的train_X = np.ndarray([])是一个0维标量数组,不存在axis=1这个维度,所以拼接时会抛出zero-dimensional arrays cannot be concatenated错误。
且循环内反复调用np.append会频繁重新申请内存,运行效率极低,更推荐先收集所有向量再一次性拼接的写法。
解决方案
方案1:先收集所有向量再统一拼接(推荐)
import numpy as np import cv2 image_paths = dt_labels['image'] img_vector_list = [] for image_path in image_paths: path = './Dataset/' + image_path img = cv2.imread(path, 0) # 转为列向量,形状为 (像素总数, 1) vectorized_img = img.reshape(-1, 1) img_vector_list.append(vectorized_img) # 沿axis=1水平拼接所有列向量,最终train_X形状为 (像素总数, 图片总数量) train_X = np.concatenate(img_vector_list, axis=1)
方案2:正确初始化空数组再循环追加(仅作逻辑参考,不推荐)
如果一定要保留循环追加的写法,需要将初始train_X调整为和图片向量行数匹配的空数组:
image_paths = dt_labels['image'] # 读取第一张图片获取像素总量,初始化匹配维度的空数组 first_img = cv2.imread('./Dataset/' + image_paths[0], 0) pixel_count = first_img.shape[0] * first_img.shape[1] train_X = np.empty((pixel_count, 0)) # 初始形状为(像素总数, 0),支持沿axis=1拼接 for image_path in image_paths: path = './Dataset/' + image_path img = cv2.imread(path, 0) vectorized_img = img.reshape(-1, 1) train_X = np.append(train_X, vectorized_img, axis=1)
内容的提问来源于stack exchange,提问作者Giovanni Mosquera
相关产品推荐
相关产品推荐

