numpy中concatenate与stack两种方法的区别是什么?
numpy中concatenate与stack的核心差异
首先需要纠正你测试中的输出误区:你贴的三维数组输出实际是stack的运行结果,按你给出的concatenate代码运行,得到的是完全不同的二维数组输出,二者不可能得到完全一致的结果,核心差异可以从以下几个维度区分:
1. 本质逻辑不同
concatenate是在现有维度上直接拼接,不会改变数组的总维度数:两个shape为(2,2)的二维数组,沿axis=0拼接后还是二维数组,shape变为(4,2),仅拼接轴的长度相加。stack是先新增一个维度再拼接,会让数组总维度+1:两个shape为(2,2)的二维数组,沿axis=0堆叠后变成三维数组,shape为(2,2,2),新增轴的长度等于参与堆叠的数组数量。
2. 参数要求不同
concatenate只要求参与拼接的数组,除了拼接轴之外的其他维度shape完全一致即可。stack要求参与堆叠的所有数组的shape完全一致。
3. 测试代码实际运行验证
concatenate运行示例
import numpy as np my_arr_1 = np.array([ [1,4] , [2,7] ]) my_arr_2 = np.array([ [0,5] , [3,8] ]) join_array=np.concatenate((my_arr_1,my_arr_2),axis=0) print(join_array) print(join_array.shape) # 输出 (4, 2)
运行输出:
[[1 4] [2 7] [0 5] [3 8]]
stack运行示例
import numpy as np my_arr_1 = np.array([ [1,4] , [2,7] ]) my_arr_2 = np.array([ [0,5] , [3,8] ]) join1_array=np.stack((my_arr_1,my_arr_2),axis=0) print(join1_array) print(join1_array.shape) # 输出 (2, 2, 2)
运行输出就是你贴的三维结构:
[[[1 4] [2 7]] [[0 5] [3 8]]]
快速区分使用场景
如果只是要把多个数组合并到已有维度里,选concatenate;如果需要给数组新增一个分组维度,把多个数组作为新维度下的元素,选stack。
内容的提问来源于stack exchange,提问作者user17344362
相关产品推荐
相关产品推荐

