我想知道是否有一种方法可以沿着给定的轴展平多维数组(即类型为ndarray的数组),而不需要在NumPy中进行复制。例如,我有一个2D图像数组,我希望将每个图像展平为一个向量。因此,一种简单的方法是numpy.array([im.flatten() for im in images]),但它会创建每个文件的副本。
发布于 2012-04-07 13:17:16
ravel it:
>>> a = numpy.arange(25).reshape((5, 5))
>>> b = a.ravel()
>>> b[0] = 55
>>> a
array([[55, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19],
[20, 21, 22, 23, 24]])或者reshape it:
>>> a = numpy.arange(27).reshape((3, 3, 3))
>>> b = a.reshape((9, 3))
>>> b[0] = 55
>>> a
array([[[55, 55, 55],
[ 3, 4, 5],
[ 6, 7, 8]],
[[ 9, 10, 11],
[12, 13, 14],
[15, 16, 17]],
[[18, 19, 20],
[21, 22, 23],
[24, 25, 26]]])在大多数情况下,这两种方法都返回原始数组的视图,而不是副本。
发布于 2013-07-26 20:58:34
如果您不知道输入数组的形状:
images.reshape((images.shape[0], -1))-1告诉reshape计算出剩余的尺寸。这假设您想要展平图像的第一个轴。
https://stackoverflow.com/questions/10051935
复制相似问题