np.数组和np.堆栈应用于图像列表



我有一个包含相同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.arraynp.stack的区别是什么,哪一个是最合适的?

非常感谢!

np.stacknp.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数组,但是元素的顺序不同。

这里我不知道哪个顺序对你的用例是正确的。我刚刚解释了为什么你得到不同的结果。

相关内容

  • 没有找到相关文章

最新更新