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

如何在Numpy数组中插入数据并保留其原有形状?

问题描述

我有若干固定形状的数据集合,需要将这些值存储到一个数组中,仅新增一个维度以保留其初始形状。示例代码如下:

import numpy as np

arr = np.array([0,1,2])
values = np.array([[3,4,5], [6,7,8], [9,10,11]])

n = 3

for i in range(n):
    arr = np.append(arr, values[n])

期望输出:

>>> array([[0,1,2],[3,4,5],[6,7,8],[9,10,11]])

实际得到的输出:

>>> array([0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11])

请问有没有合适的函数可以解决这个问题?

解决方案

问题根源

你用np.append时,默认会把输入数组扁平化后再拼接,所以最终得到一维数组。另外你的循环里还有个错误:values[n]会触发索引越界(values只有3个元素,索引范围是0-2),应该写成values[i]。

推荐方法

1. 用np.vstack垂直拼接

先把初始的一维数组arr扩展成二维(新增一个维度),再和values垂直堆叠:

import numpy as np

arr = np.array([0,1,2])
values = np.array([[3,4,5], [6,7,8], [9,10,11]])

# 将arr从(3,)转换为(1,3)的二维数组
arr_2d = arr[np.newaxis, :]
# 垂直拼接两个二维数组
result = np.vstack([arr_2d, values])
print(result)

输出结果:

[[ 0  1  2]
 [ 3  4  5]
 [ 6  7  8]
 [ 9 10 11]]

2. 用np.concatenate指定轴拼接

和上面思路一致,先扩展arr的维度,再通过指定轴来拼接:

arr_2d = np.expand_dims(arr, axis=0)
result = np.concatenate([arr_2d, values], axis=0)

效果和np.vstack完全相同。

3. 避免循环拼接

绝对不要用循环一次次调用np.append——numpy数组是固定内存大小的,每次append都会创建新数组并复制数据,数据量越大效率越低。直接用上面的批量拼接方法才是正确姿势。

内容的提问来源于stack exchange,提问作者Bruno Augusto Veloso

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 04:55:05