The stacked array has one more dimension than the input arrays.
源码中有一code
result_ndim = arrays[0].ndim + 1 # 这就是增加了一个维度
a 是3*4的矩阵
b 也是3*4的矩阵
因为合并之后增了一个维度,所以合并之后的矩阵的shape应该是
(x,x,x)
如果axis=0, 那么就在第0个位置放入,也就变成(2,x,x), 而原来的矩阵就是(3,4)
所以最后的矩阵就是(2,3,4)
如果axis=1, 那么就在第1个位置放入,也就变成(x,2,x), 而原来的矩阵就是(3,4)
所以最后的矩阵就是(3,2,4)
如果axis=2, 那么就在第2个位置放入,也就变成(x, x,2 ), 而原来的矩阵就是(3,4)
所以最后的矩阵就是(3,4, 2)
np.stack 完整的源码
arrays = [asanyarray(arr) for arr in arrays]
if not arrays:
raise ValueError('need at least one array to stack')
# 确保每个矩阵的维度都是一样的
shapes = set(arr.shape for arr in arrays)
if len(shapes) != 1:
raise ValueError('all input arrays must have the same shape')
result_ndim = arrays[0].ndim + 1
axis = normalize_axis_index(axis, result_ndim)
sl = (slice(None),) * axis + (_nx.newaxis,)
expanded_arrays = [arr[sl] for arr in arrays]
return _nx.concatenate(expanded_arrays, axis=axis, out=out)