我有一个包含相同2D形状的numpy数组的列表我想将这些图像打包到ConvNet分类器中,我尝试了两种方法,如下所示:
X_train = np.array(lst_imgs).reshape(m, 24, 40, 1)/255
XX_train = np.stack((lst_imgs), -1).reshape(m, 24, 40, 1)/255
两个张量的屈服形状:(4828, 24, 40, 1)
但是它们在每个索引处不包含相同的元素。谁能给我解释一下np.array
和np.stack
的区别是什么,哪一个是最合适的?
非常感谢!
np.stack
和np.array
提供完全相同的数组,除非您将特定的轴传递给第二个。
让我们看一个较小的例子,一个2d数组的小列表
>>> lst = [i for i in np.arange(8).reshape(2,2,2)]
>>> lst
[array([[0, 1],
[2, 3]]), array([[4, 5],
[6, 7]])]
它实际上是一个包含2个2D数组的列表每个数组的形状都是(2,2)
>>> np.array(lst)
array([[[0, 1],
[2, 3]],
[[4, 5],
[6, 7]]])
>>> np.stack(lst)
array([[[0, 1],
[2, 3]],
[[4, 5],
[6, 7]]])
好的,我们得到了相同的结果
>>> np.stack(lst, -1)
array([[[0, 4],
[1, 5]],
[[2, 6],
[3, 7]]])
但是如果我们叠加第三个轴(-1在这里表示最后),我们也会得到一个3D数组,但是元素的顺序不同。
这里我不知道哪个顺序对你的用例是正确的。我刚刚解释了为什么你得到不同的结果。