为什么我的numpy数组的形状不会改变?

时间:2012-11-08 05:07:05

标签: numpy matplotlib

我用图像中的数据制作了一个numpy数组。我想将numpy数组转换为一维数组。

import numpy as np
import matplotlib.image as img

if __name__ == '__main__':

  my_image = img.imread("zebra.jpg")[:,:,0]
  width, height = my_image.shape
  my_image = np.array(my_image)
  img_buffer = my_image.copy()
  img_buffer = img_buffer.reshape(width * height)
  print str(img_buffer.shape)

128x128图像就在这里。

enter image description here

但是,该程序打印出来(128,128)。我希望img_buffer成为一维数组。我如何重塑这个阵列?为什么numpy不会将数组重新整形为一维数组呢?

2 个答案:

答案 0 :(得分:4)

.reshape返回一个新数组,而不是重新整形。

顺便说一句,您似乎试图获取图像的字节串 - 您可能想要使用my_image.tostring()

答案 1 :(得分:1)

reshape不起作用。您的代码无效,因为您没有将reshape返回的值分配回img_buffer

如果您想将数组展平为一个维度,ravelflatten可能更容易选择。

>>> img_buffer = img_buffer.ravel()
>>> img_buffer.shape
(16384,)

否则,你想做:

>>> img_buffer = img_buffer.reshape(np.product(img_buffer.shape))
>>> img_buffer.shape
(16384,)

或者,更简洁:

>>> img_buffer = img_buffer.reshape(-1)
>>> img_buffer.shape
(16384,)