You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 17:09:02