Что вызывает AttributeError, зависящий от размера, в функции PIL fromarray?

Я получаю сообщение об ошибке из следующего кода Python3 в указанных строках. x, y и z - все простые двумерные массивы numpy, идентичные, но по размеру, и должны работать одинаково. Однако они действуют по-разному: y и z дают сбой, а x работает нормально.

import numpy as np
from PIL import Image

a = np.ones( ( 3,3,3), dtype='uint8' )
x = a[1,:,:]
y = a[:,1,:]
z = a[:,:,1]

imx = Image.fromarray(x)  # ok
imy = Image.fromarray(y)  # error
imz = Image.fromarray(z)  # error

но это работает

z1 = 1*z
imz = Image.fromarray(z1)   # ok

Ошибка:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python3\lib\site-packages\PIL\Image.py", line 1918, in fromarray
    obj = obj.tobytes()
AttributeError: 'numpy.ndarray' object has no attribute 'tobytes'

Итак, в чем разница между x, y, z, z1? Ничего, что я могу сказать.

>>> z.dtype
dtype('uint8')
>>> z1.dtype
dtype('uint8')
>>> z.shape
(3, 4)
>>> z1.shape
(3, 4)

Я использую Python 3.2.3 на компьютере с Windows 7 Enterprise, все 64-битное.

5
задан DSM 1 June 2012 в 18:45
поделиться