以下是一个简单的示例,通过形象化地解释 np.stack
和 np.concatenate
的区别,方便用于博客发布。
理解 np.stack
和 np.concatenate
的区别
在 Numpy 中,np.stack
和 np.concatenate
是用于合并数组的两种常见方法,它们的关键区别在于:
np.stack
:创建一个新的维度,将数组堆叠在一起。np.concatenate
:沿着现有的维度拼接数组,不会新增维度。
示例数据
我们以两个形状相同的一维数组为例:
import numpy as np
a = np.array([1, 2, 3]) # shape: (3,)
b = np.array([4, 5, 6]) # shape: (3,)
1. 使用 np.concatenate
np.concatenate
会沿着指定的现有维度将数组拼接。
示例代码:
result = np.concatenate([a, b], axis=0)
print(result) # 输出: [1 2 3 4 5 6]
print(result.shape) # 输出: (6,)
- 结果形状:
(6,)
,拼接后的数组仍然是 一维数组。 - 本质:只是将两个数组的值排列在一起,没有新增维度。
2. 使用 np.stack
np.stack
会在新的维度上将数组堆叠起来。
示例代码:
result = np.stack([a, b], axis=0)
print(result)
# 输出:
# [[1 2 3]
# [4 5 6]]
print(result.shape) # 输出: (2, 3)
- 结果形状:
(2, 3)
,新增了一个维度,将数组堆叠成了一个 二维数组。 - 本质:
np.stack
会创建一个新的维度,这里是在第 0 维堆叠了数组。
另一个维度上的 np.stack
示例
如果你在 最后一个维度(axis=-1
)堆叠,会得到:
result = np.stack([a, b], axis=-1)
print(result)
# 输出:
# [[1 4]
# [2 5]
# [3 6]]
print(result.shape) # 输出: (3, 2)
- 结果形状:
(3, 2)
,表示沿着最后一个维度堆叠,每个元素形成一个小数组。
总结表格
操作 | 示例代码 | 结果 | 结果形状 | 特点 |
---|---|---|---|---|
np.concatenate | np.concatenate([a, b], axis=0) | [1, 2, 3, 4, 5, 6] | (6,) | 沿现有维度拼接,不新增维度 |
np.stack | np.stack([a, b], axis=0) | [[1, 2, 3], [4, 5, 6]] | (2, 3) | 新增一个维度,将数组堆叠起来 |
形象比喻
np.concatenate
就像把两串珍珠(数组)连在一起,仍然是一条长串(同一维度)。np.stack
就像把珍珠串一层一层叠起来,形成一个二维的“珍珠塔”(新增维度)。